diff --git a/laravel/blade.php b/laravel/blade.php
index 98052992..f692669d 100644
--- a/laravel/blade.php
+++ b/laravel/blade.php
@@ -21,11 +21,7 @@ public static function parse($path)
*/
public static function parse_string($value)
{
- $value = static::rewrite_echos($value);
- $value = static::rewrite_openings($value);
- $value = static::rewrite_closings($value);
-
- return $value;
+ return static::closings(static::openings(static::echos($value)));
}
/**
@@ -34,7 +30,7 @@ public static function parse_string($value)
* @param string $value
* @return string
*/
- protected static function rewrite_echos($value)
+ protected static function echos($value)
{
return preg_replace('/\{\{(.+)\}\}/', '', $value);
}
@@ -45,7 +41,7 @@ protected static function rewrite_echos($value)
* @param string $value
* @return string
*/
- protected static function rewrite_openings($value)
+ protected static function openings($value)
{
return preg_replace('/@(if|elseif|foreach|for|while)(\s*\(.*?\))\:/', '', $value);
}
@@ -56,7 +52,7 @@ protected static function rewrite_openings($value)
* @param string $value
* @return string
*/
- protected static function rewrite_closings($value)
+ protected static function closings($value)
{
$value = preg_replace('/(\s*)@(else)(.*?)\:/', '$1', $value);
$value = preg_replace('/(\s*)@(endif|endforeach|endfor|endwhile)(\s*)/', '$1 $3', $value);
diff --git a/laravel/bootstrap/core.php b/laravel/bootstrap/core.php
index f157c4cd..e81f55b7 100644
--- a/laravel/bootstrap/core.php
+++ b/laravel/bootstrap/core.php
@@ -17,13 +17,15 @@
define('CONTROLLER_PATH', APP_PATH.'controllers/');
define('DATABASE_PATH', STORAGE_PATH.'database/');
define('LANG_PATH', APP_PATH.'language/');
+define('LIBRARY_PATH', APP_PATH.'libraries/');
+define('MODEL_PATH', APP_PATH.'models/');
define('ROUTE_PATH', APP_PATH.'routes/');
define('SESSION_PATH', STORAGE_PATH.'sessions/');
define('SYS_CONFIG_PATH', SYS_PATH.'config/');
define('SYS_LANG_PATH', SYS_PATH.'language/');
define('VIEW_PATH', APP_PATH.'views/');
-define('EXT', '.php');
+define('EXT', '.php');
define('BLADE_EXT', '.blade.php');
/**
@@ -35,24 +37,6 @@
require SYS_PATH.'loader'.EXT;
require SYS_PATH.'arr'.EXT;
-/**
- * Determine the application environment. The environment is typically set by an environment
- * variable on the server, as this provides the most accident-proof method of handling
- * application environments. However, the environment could be manually set by the developer
- * in the front controller if access to the environment variables is not available.
- * set by an environment variable on the server.
- */
-$environment = (isset($_SERVER['LARAVEL_ENV'])) ? $_SERVER['LARAVEL_ENV'] : null;
-
-/**
- * Register the path to the configuration files.
- */
-$configs = array(SYS_CONFIG_PATH, CONFIG_PATH);
-
-if ( ! is_null($environment)) $configs[] = CONFIG_PATH.$environment.'/';
-
-Config::$paths = $configs;
-
/**
* Bootstrap the application inversion of control (IoC) container. The container provides the
* convenient resolution of objects and their dependencies, allowing for flexibility and
@@ -68,11 +52,7 @@
* Register the application auto-loader. The auto-loader is responsible for the lazy-loading
* of all of the Laravel core classes, as well as the developer created libraries and models.
*/
-spl_autoload_register(array('Laravel\\Loader', 'load'));
-
-Loader::$paths = array(BASE_PATH, APP_PATH.'models/', APP_PATH.'libraries/', APP_PATH);
-
-Loader::$aliases = Config::get('aliases');
+spl_autoload_register(array($container->resolve('laravel.loader'), 'load'));
/**
* Define a few convenient global functions.
diff --git a/laravel/config.php b/laravel/config.php
index 60c10c89..0cb52658 100644
--- a/laravel/config.php
+++ b/laravel/config.php
@@ -2,6 +2,13 @@
class Config {
+ /**
+ * The paths to the configuration files.
+ *
+ * @var array
+ */
+ public static $paths = array(SYS_CONFIG_PATH, CONFIG_PATH);
+
/**
* All of the loaded configuration items.
*
@@ -11,13 +18,6 @@ class Config {
*/
protected static $items = array();
- /**
- * The paths to the configuration files.
- *
- * @var array
- */
- public static $paths = array();
-
/**
* Determine if a configuration item or file exists.
*
@@ -122,8 +122,8 @@ protected static function load($file)
$config = array();
// Configuration files cascade. Typically, the system configuration array is loaded
- // first, followed by the application array, followed by the environment array.
- // This allows the convenient overriding of configuration options.
+ // first, followed by the application array, providing the convenient cascading
+ // of configuration options from system to application.
foreach (static::$paths as $directory)
{
if (file_exists($path = $directory.$file.EXT))
diff --git a/laravel/config/container.php b/laravel/config/container.php
index 009b461d..6396daa3 100644
--- a/laravel/config/container.php
+++ b/laravel/config/container.php
@@ -64,6 +64,12 @@
}),
+ 'laravel.loader' => array('singleton' => true, 'resolver' => function($c)
+ {
+ return new Loader(array(BASE_PATH, MODEL_PATH, LIBRARY_PATH, BASE_PATH), Config::get('aliases'));
+ }),
+
+
'laravel.request' => array('singleton' => true, 'resolver' => function($c)
{
return new Request($c->resolve('laravel.uri'), $_SERVER, $_POST);
diff --git a/laravel/container.php b/laravel/container.php
index 003af5ac..4754fcd5 100644
--- a/laravel/container.php
+++ b/laravel/container.php
@@ -130,6 +130,25 @@ public function instance($name, $instance)
$this->singletons[$name] = $instance;
}
+ /**
+ * Resolve a core Laravel class from the container.
+ *
+ *
+ * // Resolve the "laravel.input" class from the container
+ * $input = IoC::container()->core('input');
+ *
+ * // Equivalent resolution using the "resolve" method
+ * $input = IoC::container()->resolve('laravel.input');
+ *
+ *
+ * @param string $name
+ * @return mixed
+ */
+ public function core($name)
+ {
+ return $this->resolve("laravel.{$name}");
+ }
+
/**
* Resolve an object instance from the container.
*
diff --git a/laravel/controller.php b/laravel/controller.php
index f4503bca..907ac1fd 100644
--- a/laravel/controller.php
+++ b/laravel/controller.php
@@ -35,7 +35,7 @@ public function __get($key)
{
if (IoC::container()->registered("laravel.{$key}"))
{
- return IoC::container()->resolve("laravel.{$key}");
+ return IoC::container()->core($key);
}
elseif (IoC::container()->registered($key))
{
diff --git a/laravel/database/connection.php b/laravel/database/connection.php
index 74311054..97131f5f 100644
--- a/laravel/database/connection.php
+++ b/laravel/database/connection.php
@@ -1,7 +1,4 @@
-
+ * // Get the total number of rows on a table
+ * $count = DB::connection()->scalar('select count(*) from users');
+ *
+ * // Get the sum of payment amounts from a table
+ * $sum = DB::connection()->scalar('select sum(amount) from payments')
+ *
+ *
+ * @param string $sql
+ * @param array $bindings
+ * @return float
*/
public function scalar($sql, $bindings = array())
{
$result = (array) $this->first($sql, $bindings);
- return (strpos(strtolower(trim($sql)), 'select count') === 0) ? (int) reset($result) : (float) reset($result);
+ return (float) reset($result);
}
/**
* Execute a SQL query against the connection and return the first result.
*
+ *
+ * // Execute a query against the database connection
+ * $user = DB::connection()->first('select * from users');
+ *
+ * // Execute a query with bound parameters
+ * $user = DB::connection()->first('select * from users where id = ?', array($id));
+ *
+ *
* @param string $sql
* @param array $bindings
* @return object
*/
public function first($sql, $bindings = array())
{
- return (count($results = $this->query($sql, $bindings)) > 0) ? $results[0] : null;
+ if (count($results = $this->query($sql, $bindings)) > 0) return $results[0];
}
/**
@@ -82,6 +95,14 @@ public function first($sql, $bindings = array())
* DELETE -> Number of Rows affected.
* ELSE -> Boolean true / false depending on success.
*
+ *
+ * // Execute a query against the database connection
+ * $users = DB::connection()->query('select * from users');
+ *
+ * // Execute a query with bound parameters
+ * $user = DB::connection()->query('select * from users where id = ?', array($id));
+ *
+ *
* @param string $sql
* @param array $bindings
* @return mixed
diff --git a/laravel/database/connectors/connector.php b/laravel/database/connectors/connector.php
index caedbe78..3294bbc0 100644
--- a/laravel/database/connectors/connector.php
+++ b/laravel/database/connectors/connector.php
@@ -35,7 +35,7 @@ protected function options($config)
{
$options = (isset($config['options'])) ? $config['options'] : array();
- return array_merge($this->options, $options);
+ return $this->options + $options;
}
}
\ No newline at end of file
diff --git a/laravel/database/eloquent/model.php b/laravel/database/eloquent/model.php
index 25151ac7..3013092e 100644
--- a/laravel/database/eloquent/model.php
+++ b/laravel/database/eloquent/model.php
@@ -147,7 +147,7 @@ public static function query($class)
// Since this method is only used for instantiating models for querying
// purposes, we will go ahead and set the Query instance on the model.
- $model->query = IoC::resolve('laravel.database')->connection(static::$connection)->table(static::table($class));
+ $model->query = IoC::core('database')->connection(static::$connection)->table(static::table($class));
return $model;
}
@@ -361,7 +361,7 @@ public function save()
// Since the model was instantiated using "new", a query instance has not been set.
// Only models being used for querying have their query instances set by default.
- $this->query = IoC::resolve('laravel.database')->connection(static::$connection)->table(static::table($model));
+ $this->query = IoC::core('database')->connection(static::$connection)->table(static::table($model));
if (property_exists($model, 'timestamps') and $model::$timestamps)
{
@@ -410,7 +410,7 @@ public function delete($id = null)
// delete statement to the query instance.
if ( ! $this->exists) return $this->query->delete();
- return IoC::resolve('laravel.database')->connection(static::$connection)->table(static::table(get_class($this)))->delete($this->id);
+ return IoC::core('database')->connection(static::$connection)->table(static::table(get_class($this)))->delete($this->id);
}
/**
diff --git a/laravel/database/grammars/grammar.php b/laravel/database/grammars/grammar.php
index 79a39527..823df1e7 100644
--- a/laravel/database/grammars/grammar.php
+++ b/laravel/database/grammars/grammar.php
@@ -1,81 +1,94 @@
-aggregate))
+ $sql = array();
+
+ // Iterate through each query component, calling the compiler for that
+ // component, and passing the query instance into the compiler.
+ foreach ($this->components as $component)
{
- $sql[] = $this->compile_aggregate($query->aggregate['aggregator'], $query->aggregate['column']);
- }
- else
- {
- $sql[] = $this->compile_select($query);
+ if ( ! is_null($query->$component)) $sql[] = call_user_func(array($this, $component), $query);
}
- $sql[] = $this->compile_from($query->table);
-
- foreach (array('joins', 'wheres', 'orderings', 'limit', 'offset') as $clause)
- {
- if ( ! is_null($query->$clause)) $sql[] = call_user_func(array($this, 'compile_'.$clause), $query->$clause);
- }
-
- return implode(' ', array_filter($sql, function($value) { return ! is_null($value) and (string) $value !== ''; }));
+ return implode(' ', Arr::without($sql, array(null, '')));
}
/**
- * Compile the query SELECT clause.
+ * Compile the SELECT clause for a query.
*
* @param Query $query
* @return string
*/
- protected function compile_select(Query $query)
+ protected function selects(Query $query)
{
- return (($query->distinct) ? 'SELECT DISTINCT ' : 'SELECT ').implode(', ', array_map(array($this, 'wrap'), $query->select));
+ if ( ! is_null($query->aggregate)) return $this->aggregate($query);
+
+ return (($query->distinct) ? 'SELECT DISTINCT ' : 'SELECT ').$this->columnize($query->selects);
}
/**
- * Compile the query SELECT clause with an aggregate function.
+ * Compile an aggregating SELECT clause for a query.
*
- * @param string $aggregator
- * @param string $column
+ * This method compiled the SELECT clauses for queries built using the
+ * count, max, min, abs, and sum methods on the fluent query builder.
+ *
+ * @param Query $query
* @return string
*/
- protected function compile_aggregate($aggregator, $column)
+ protected function aggregate(Query $query)
{
- return 'SELECT '.$aggregator.'('.$this->wrap($column).') AS '.$this->wrap('aggregate');
+ list($aggregator, $column) = array($query->aggregate['aggregator'], $query->aggregate['column']);
+
+ return 'SELECT '.$aggregator.'('.$this->wrap($column).')';
}
/**
- * Compile the query FROM clause.
+ * Compile the FROM clause for a query.
*
- * Note: This method does not compile any JOIN clauses. Joins are compiled by the compile_joins method.
- *
- * @param string $table
+ * @param Query $query
* @return string
*/
- protected function compile_from($table)
+ protected function from(Query $query)
{
- return 'FROM '.$this->wrap($table);
+ return 'FROM '.$this->wrap($query->from);
}
/**
- * Compile the query JOIN clauses.
+ * Compile the JOIN clauses for a query.
*
- * @param array $joins
+ * @param Query $query
* @return string
*/
- protected function compile_joins($joins)
+ protected function joins(Query $query)
{
- foreach ($joins as $join)
+ foreach ($query->joins as $join)
{
extract($join);
@@ -86,30 +99,36 @@ protected function compile_joins($joins)
}
/**
- * Compile the query WHERE clauses.
+ * Compile the WHERE clause for a query.
*
- * @param array $wheres
+ * @param Query $query
* @return string
*/
- protected function compile_wheres($wheres)
+ protected function wheres(Query $query)
{
- $sql = array('WHERE 1 = 1');
-
+ // Each WHERE clause array has a "type" that is assigned by the query builder, and
+ // each type has its own compiler function. For example, "where in" queries are
+ // compiled by the "where_in" function.
+ //
+ // The only exception to this rule are "raw" where clauses, which are simply
+ // appended to the query as-is, without any further compiling.
foreach ($wheres as $where)
{
- $sql[] = (is_string($where)) ? $where : $where['connector'].' '.$this->{'compile_'.$where['type']}($where);
+ $sql[] = ($where['type'] == 'raw') ? $where['sql'] : $where['connector'].' '.$this->{$where['type']}($where);
}
- return implode(' ', $sql);
+ return implode(' ', array_merge(array('WHERE 1 = 1'), $sql));
}
/**
* Compile a simple WHERE clause.
*
+ * This method compiles the SQL for the "where" and "or_where" query functions.
+ *
* @param array $where
* @return string
*/
- protected function compile_where($where)
+ protected function where($where)
{
return $this->wrap($where['column']).' '.$where['operator'].' ?';
}
@@ -117,10 +136,12 @@ protected function compile_where($where)
/**
* Compile a WHERE IN clause.
*
+ * This method compiled the SQL for all of the "where_in" style query functions.
+ *
* @param array $where
* @return string
*/
- protected function compile_where_in($where)
+ protected function where_in($where)
{
$operator = ($where['not']) ? 'NOT IN' : 'IN';
@@ -130,10 +151,12 @@ protected function compile_where_in($where)
/**
* Compile a WHERE NULL clause.
*
+ * This method compiles the SQL for all of the "where_null" style query functions.
+ *
* @param array $where
* @return string
*/
- protected function compile_where_null($where)
+ protected function where_null($where)
{
$operator = ($where['not']) ? 'NOT NULL' : 'NULL';
@@ -141,14 +164,14 @@ protected function compile_where_null($where)
}
/**
- * Compile the query ORDER BY clause.
+ * Compile ORDER BY clause for a query.
*
- * @param array $orderings
+ * @param Query $query
* @return string
*/
- protected function compile_orderings($orderings)
+ protected function orderings(Query $query)
{
- foreach ($orderings as $ordering)
+ foreach ($query->orderings as $ordering)
{
$sql[] = $this->wrap($ordering['column']).' '.strtoupper($ordering['direction']);
}
@@ -157,25 +180,25 @@ protected function compile_orderings($orderings)
}
/**
- * Compile the query LIMIT.
+ * Compile the LIMIT clause for a query.
*
- * @param int $limit
+ * @param Query $query
* @return string
*/
- protected function compile_limit($limit)
+ protected function limit(Query $query)
{
- return 'LIMIT '.$limit;
+ return 'LIMIT '.$query->limit;
}
/**
- * Compile the query OFFSET.
+ * Compile the OFFSET clause for a query.
*
- * @param int $offset
+ * @param Query $query
* @return string
*/
- protected function compile_offset($offset)
+ protected function offset(Query $query)
{
- return 'OFFSET '.$offset;
+ return 'OFFSET '.$query->offset;
}
/**
@@ -187,21 +210,9 @@ protected function compile_offset($offset)
*/
public function insert(Query $query, $values)
{
- $columns = array_map(array($this, 'wrap'), array_keys($values));
+ $columns = implode(', ', $this->columnize(array_keys($values)));
- return 'INSERT INTO '.$this->wrap($query->table).' ('.implode(', ', $columns).') VALUES ('.$this->parameterize($values).')';
- }
-
- /**
- * Compile a SQL INSERT statment that returns an auto-incrementing ID from a Query instance.
- *
- * @param Query $query
- * @param array $values
- * @return string
- */
- public function insert_get_id(Query $query, $values)
- {
- return $this->insert($query, $values);
+ return 'INSERT INTO '.$this->wrap($query->from).' ('.$columns.') VALUES ('.$this->parameterize($values).')';
}
/**
@@ -213,11 +224,14 @@ public function insert_get_id(Query $query, $values)
*/
public function update(Query $query, $values)
{
- foreach (array_keys($values) as $column) { $sets[] = $this->wrap($column).' = ?'; }
+ foreach (array_keys($values) as $column)
+ {
+ $sets[] = $this->wrap($column).' = ?';
+ }
- $sql = 'UPDATE '.$this->wrap($query->table).' SET '.implode(', ', $sets);
+ $sql = 'UPDATE '.$this->wrap($query->from).' SET '.implode(', ', $sets);
- return (count($query->wheres) > 0) ? $sql.' '.$this->compile_wheres($query->wheres) : $sql;
+ return (count($query->wheres) > 0) ? $sql.' '.$this->wheres($query->wheres) : $sql;
}
/**
@@ -228,15 +242,26 @@ public function update(Query $query, $values)
*/
public function delete(Query $query)
{
- $sql = 'DELETE FROM '.$this->wrap($query->table);
+ $sql = 'DELETE FROM '.$this->wrap($query->from);
- return (count($query->wheres) > 0) ? $sql.' '.$this->compile_wheres($query->wheres) : $sql;
+ return (count($query->wheres) > 0) ? $sql.' '.$this->wheres($query->wheres) : $sql;
+ }
+
+ /**
+ * Create a comma-delimited list of wrapped column names.
+ *
+ * @param array $columns
+ * @return string
+ */
+ protected function columnize($columns)
+ {
+ return implode(', ', array_map(array($this, 'wrap'), $columns));
}
/**
* Wrap a value in keyword identifiers.
*
- * @param string $value
+ * @param string $value
* @return string
*/
public function wrap($value)
@@ -245,7 +270,7 @@ public function wrap($value)
foreach (explode('.', $value) as $segment)
{
- $wrapped[] = ($segment != '*') ? $this->wrapper().$segment.$this->wrapper() : $segment;
+ $wrapped[] = ($segment != '*') ? $this->wrapper.$segment.$this->wrapper : $segment;
}
return implode('.', $wrapped);
@@ -254,7 +279,7 @@ public function wrap($value)
/**
* Wrap an alias in keyword identifiers.
*
- * @param string $value
+ * @param string $value
* @return string
*/
public function wrap_alias($value)
@@ -264,19 +289,15 @@ public function wrap_alias($value)
return $this->wrap($segments[0]).' AS '.$this->wrap($segments[2]);
}
- /**
- * Get the keyword identifier wrapper for the connection.
- *
- * @return string
- */
- public function wrapper() { return '"'; }
-
/**
* Create query parameters from an array of values.
*
- * @param array $values
+ * @param array $values
* @return string
*/
- public function parameterize($values) { return implode(', ', array_fill(0, count($values), '?')); }
+ public function parameterize($values)
+ {
+ return implode(', ', array_fill(0, count($values), '?'));
+ }
}
\ No newline at end of file
diff --git a/laravel/database/grammars/mysql.php b/laravel/database/grammars/mysql.php
index d9d50204..8c45550f 100644
--- a/laravel/database/grammars/mysql.php
+++ b/laravel/database/grammars/mysql.php
@@ -3,10 +3,10 @@
class MySQL extends Grammar {
/**
- * Get the keyword identifier wrapper for the connection.
+ * The keyword identifier for the database system.
*
- * @return string
+ * @var string
*/
- public function wrapper() { return '`'; }
+ protected $wrapper = '`';
}
\ No newline at end of file
diff --git a/laravel/database/manager.php b/laravel/database/manager.php
index 0234d018..92d49233 100644
--- a/laravel/database/manager.php
+++ b/laravel/database/manager.php
@@ -18,6 +18,14 @@ class Manager {
*
* Note: Database connections are managed as singletons.
*
+ *
+ * // Get the default database connection for the application
+ * $connection = DB::connection();
+ *
+ * // Get a specific connection by passing the connection name
+ * $connection = DB::connection('mysql');
+ *
+ *
* @param string $connection
* @return Connection
*/
diff --git a/laravel/database/query.php b/laravel/database/query.php
index 43e8f390..03e33576 100644
--- a/laravel/database/query.php
+++ b/laravel/database/query.php
@@ -21,7 +21,7 @@ class Query {
*
* @var array
*/
- public $select;
+ public $selects;
/**
* If the query is performing an aggregate function, this will contain the column
@@ -43,7 +43,7 @@ class Query {
*
* @var string
*/
- public $table;
+ public $from;
/**
* The table joins.
@@ -90,14 +90,14 @@ class Query {
/**
* Create a new query instance.
*
- * @param Connection $connection
- * @param Grammars\Grammar $grammar
- * @param string $table
+ * @param Connection $connection
+ * @param Grammars\Grammar $grammar
+ * @param string $table
* @return void
*/
public function __construct(Connection $connection, Grammars\Grammar $grammar, $table)
{
- $this->table = $table;
+ $this->from = $table;
$this->grammar = $grammar;
$this->connection = $connection;
}
@@ -122,7 +122,7 @@ public function distinct()
*/
public function select($columns = array('*'))
{
- $this->select = (array) $columns;
+ $this->selects = (array) $columns;
return $this;
}
@@ -139,7 +139,7 @@ public function select($columns = array('*'))
*/
public function join($table, $column1, $operator, $column2, $type = 'INNER')
{
- $this->joins[] = compact('table', 'column1', 'operator', 'column2', 'type');
+ $this->joins[] = compact('type', 'table', 'column1', 'operator', 'column2');
return $this;
}
@@ -178,7 +178,7 @@ public function reset_where()
*/
public function raw_where($where, $bindings = array(), $connector = 'AND')
{
- $this->wheres[] = ' '.$connector.' '.$where;
+ $this->wheres[] = array('type' => 'raw', 'connector' => $connector, 'sql' => $where);
$this->bindings = array_merge($this->bindings, $bindings);
@@ -470,7 +470,7 @@ private function aggregate($aggregator, $column)
// Reset the SELECT clause so more queries can be performed using the same instance.
// This is helpful for getting aggregates and then getting actual results.
- $this->select = null;
+ $this->selects = null;
return $result;
}
@@ -507,13 +507,13 @@ public function first($columns = array('*'))
*/
public function get($columns = array('*'))
{
- if (is_null($this->select)) $this->select($columns);
+ if (is_null($this->selects)) $this->select($columns);
$results = $this->connection->query($this->grammar->select($this), $this->bindings);
// Reset the SELECT clause so more queries can be performed using the same instance.
// This is helpful for getting aggregates and then getting actual results.
- $this->select = null;
+ $this->selects = null;
return $results;
}
@@ -582,7 +582,7 @@ public function __call($method, $parameters)
return $this->dynamic_where($method, $parameters, $this);
}
- if (in_array($method, array('count', 'min', 'max', 'avg', 'sum')))
+ if (in_array($method, array('abs', 'count', 'min', 'max', 'avg', 'sum')))
{
return ($method == 'count') ? $this->aggregate(strtoupper($method), '*') : $this->aggregate(strtoupper($method), $parameters[0]);
}
diff --git a/laravel/loader.php b/laravel/loader.php
index f76d8ed6..693742af 100644
--- a/laravel/loader.php
+++ b/laravel/loader.php
@@ -7,32 +7,56 @@ class Loader {
*
* @var array
*/
- public static $paths = array();
+ protected $paths = array();
/**
* The class aliases defined for the application.
*
* @var array
*/
- public static $aliases = array();
+ protected $aliases = array();
+
+ /**
+ * Create a new class loader instance.
+ *
+ * @param array $paths
+ * @param array $aliases
+ * @return void
+ */
+ public function __construct($paths, $aliases = array())
+ {
+ $this->paths = $paths;
+ $this->aliases = $aliases;
+ }
/**
* Load the file for a given class.
*
+ *
+ * // Load the file for the "User" class
+ * Loader::load('User');
+ *
+ * // Load the file for the "Repositories\User" class
+ * Loader::load('Repositories\\User');
+ *
+ *
* @param string $class
* @return void
*/
- public static function load($class)
+ public function load($class)
{
- // All Laravel core classes follow a namespace to directory convention. So, we will
- // replace all of the namespace slashes with directory slashes.
+ // All Laravel core classes follow a namespace to directory convention.
+ // We will replace all of the namespace slashes with directory slashes.
$file = strtolower(str_replace('\\', '/', $class));
- // First, we'll check to determine if an alias exists. If it does, we will define the
- // alias and bail out. Aliases are defined for most developer used core classes.
- if (array_key_exists($class, static::$aliases)) return class_alias(static::$aliases[$class], $class);
+ // Check to determine if an alias exists. If it does, we will define the
+ // alias and bail out. Aliases are defined for most used core classes.
+ if (array_key_exists($class, $this->aliases))
+ {
+ return class_alias($this->aliases[$class], $class);
+ }
- foreach (static::$paths as $path)
+ foreach ($this->paths as $path)
{
if (file_exists($path = $path.$file.EXT))
{
@@ -46,15 +70,13 @@ public static function load($class)
/**
* Register a class alias with the auto-loader.
*
- * Note: Aliases are lazy-loaded, so the aliased class will not be included until it is needed.
- *
* @param string $alias
* @param string $class
* @return void
*/
- public static function alias($alias, $class)
+ public function alias($alias, $class)
{
- static::$aliases[$alias] = $class;
+ $this->aliases[$alias] = $class;
}
/**
@@ -63,9 +85,9 @@ public static function alias($alias, $class)
* @param string $path
* @return void
*/
- public static function path($path)
+ public function path($path)
{
- static::$paths[] = rtrim($path, '/').'/';
+ $this->paths[] = rtrim($path, '/').'/';
}
/**
@@ -74,9 +96,9 @@ public static function path($path)
* @param string $alias
* @return void
*/
- public static function forget_alias($alias)
+ public function forget_alias($alias)
{
- unset(static::$aliases[$alias]);
+ unset($this->aliases[$alias]);
}
}
\ No newline at end of file
diff --git a/laravel/validation/validator.php b/laravel/validation/validator.php
index b17cd814..b7dc43a6 100644
--- a/laravel/validation/validator.php
+++ b/laravel/validation/validator.php
@@ -285,7 +285,9 @@ protected function get_size($attribute)
$value = $this->attributes[$attribute];
- return (array_key_exists($attribute, $_FILES)) ? $value['size'] / 1024 : Str::length(trim($value));
+ $files = IoC::container()->resolve('laravel.input')->files();
+
+ return (array_key_exists($attribute, $files) ? $value['size'] / 1024 : Str::length(trim($value));
}
/**