Commit 4525eae2 authored by Taylor Otwell's avatar Taylor Otwell

revert back to more sensible architecture.

parent 47db2ff1
...@@ -19,36 +19,35 @@ return array( ...@@ -19,36 +19,35 @@ return array(
*/ */
'Arr' => 'Laravel\\Arr', 'Arr' => 'Laravel\\Arr',
'Asset' => 'Laravel\\Facades\\Asset', 'Asset' => 'Laravel\\Asset',
'Auth' => 'Laravel\\Facades\\Auth', 'Auth' => 'Laravel\\Facades\\Auth',
'Benchmark' => 'Laravel\\Benchmark', 'Benchmark' => 'Laravel\\Benchmark',
'Cache' => 'Laravel\\Facades\\Cache', 'Cache' => 'Laravel\\Facades\\Cache',
'Config' => 'Laravel\\Facades\\Config', 'Config' => 'Laravel\\Config',
'Controller' => 'Laravel\\Controller', 'Controller' => 'Laravel\\Controller',
'Cookie' => 'Laravel\\Facades\\Cookie', 'Cookie' => 'Laravel\\Cookie',
'Crypter' => 'Laravel\\Facades\\Crypter', 'Crypter' => 'Laravel\\Facades\\Crypter',
'DB' => 'Laravel\\Facades\\DB', 'DB' => 'Laravel\\Database\\Manager',
'Download' => 'Laravel\\Facades\\Download',
'Eloquent' => 'Laravel\\Database\\Eloquent\\Model', 'Eloquent' => 'Laravel\\Database\\Eloquent\\Model',
'File' => 'Laravel\\Facades\\File', 'File' => 'Laravel\\File',
'Form' => 'Laravel\\Facades\\Form', 'Form' => 'Laravel\\Form',
'Hasher' => 'Laravel\\Facades\\Hasher', 'Hasher' => 'Laravel\\Facades\\Hasher',
'HTML' => 'Laravel\\Facades\\HTML', 'HTML' => 'Laravel\\HTML',
'Inflector' => 'Laravel\\Inflector', 'Inflector' => 'Laravel\\Inflector',
'Input' => 'Laravel\\Facades\\Input', 'Input' => 'Laravel\\Input',
'IoC' => 'Laravel\\IoC', 'IoC' => 'Laravel\\IoC',
'Lang' => 'Laravel\\Facades\\Lang', 'Lang' => 'Laravel\\Lang',
'Loader' => 'Laravel\\Facades\\Loader', 'Loader' => 'Laravel\\Loader',
'Messages' => 'Laravel\\Validation\\Messages', 'Messages' => 'Laravel\\Validation\\Messages',
'Package' => 'Laravel\\Facades\\Package', 'Package' => 'Laravel\\Facades\\Package',
'URI' => 'Laravel\\Facades\\URI', 'URI' => 'Laravel\\URI',
'URL' => 'Laravel\\Facades\\URL', 'URL' => 'Laravel\\URL',
'Redirect' => 'Laravel\\Facades\\Redirect', 'Redirect' => 'Laravel\\Redirect',
'Request' => 'Laravel\\Facades\\Request', 'Request' => 'Laravel\\Request',
'Response' => 'Laravel\\Facades\\Response', 'Response' => 'Laravel\\Response',
'Session' => 'Laravel\\Facades\\Session', 'Session' => 'Laravel\\Facades\\Session',
'Str' => 'Laravel\\Str', 'Str' => 'Laravel\\Str',
'Validator' => 'Laravel\\Facades\\Validator', 'Validator' => 'Laravel\\Validator',
'View' => 'Laravel\\Facades\\View', 'View' => 'Laravel\\View',
); );
\ No newline at end of file
...@@ -7,25 +7,7 @@ class Asset { ...@@ -7,25 +7,7 @@ class Asset {
* *
* @var array * @var array
*/ */
public $containers = array(); protected static $containers = array();
/**
* The HTML writer instance.
*
* @var HTML
*/
protected $html;
/**
* Create a new asset manager instance.
*
* @param HTML $html
* @return void
*/
public function __construct(HTML $html)
{
$this->html = $html;
}
/** /**
* Get an asset container instance. * Get an asset container instance.
...@@ -45,14 +27,14 @@ class Asset { ...@@ -45,14 +27,14 @@ class Asset {
* @param string $container * @param string $container
* @return Asset_Container * @return Asset_Container
*/ */
public function container($container = 'default') public static function container($container = 'default')
{ {
if ( ! isset($this->containers[$container])) if ( ! isset(static::$containers[$container]))
{ {
$this->containers[$container] = new Asset_Container($container, $this->html); static::$containers[$container] = new Asset_Container($container);
} }
return $this->containers[$container]; return static::$containers[$container];
} }
/** /**
...@@ -66,9 +48,9 @@ class Asset { ...@@ -66,9 +48,9 @@ class Asset {
* echo Asset::styles(); * echo Asset::styles();
* </code> * </code>
*/ */
public function __call($method, $parameters) public static function __callStatic($method, $parameters)
{ {
return call_user_func_array(array($this->container(), $method), $parameters); return call_user_func_array(array(static::container(), $method), $parameters);
} }
} }
...@@ -89,13 +71,6 @@ class Asset_Container { ...@@ -89,13 +71,6 @@ class Asset_Container {
*/ */
public $assets = array(); public $assets = array();
/**
* The HTML writer instance.
*
* @var HTML
*/
protected $html;
/** /**
* Create a new asset container instance. * Create a new asset container instance.
* *
...@@ -103,10 +78,9 @@ class Asset_Container { ...@@ -103,10 +78,9 @@ class Asset_Container {
* @param HTML $html * @param HTML $html
* @return void * @return void
*/ */
public function __construct($name, HTML $html) public function __construct($name)
{ {
$this->name = $name; $this->name = $name;
$this->html = $html;
} }
/** /**
...@@ -275,7 +249,7 @@ class Asset_Container { ...@@ -275,7 +249,7 @@ class Asset_Container {
$asset = $this->assets[$group][$name]; $asset = $this->assets[$group][$name];
return $this->html->$group($asset['source'], $asset['attributes']); return HTML::$group($asset['source'], $asset['attributes']);
} }
/** /**
......
<?php namespace Laravel\Cache\Drivers; <?php namespace Laravel\Cache\Drivers;
class APC_Engine {
/**
* Retrieve an item from the APC cache.
*
* @param string $key
* @return mixed
*/
public function fetch($key)
{
return apc_fetch($key);
}
/**
* Store an item in the APC cache.
*
* @param string $key
* @param mixed $value
* @param int $seconds
* @return void
*/
public function store($key, $value, $seconds)
{
apc_store($key, $value, $seconds);
}
/**
* Delete an item from the APC cache.
*
* @param string $key
* @return void
*/
public function delete($key)
{
apc_delete($key);
}
}
class APC extends Driver { class APC extends Driver {
/**
* The APC engine instance.
*
* @var APC_Engine
*/
private $apc;
/** /**
* The cache key from the cache configuration file. * The cache key from the cache configuration file.
* *
...@@ -58,13 +12,11 @@ class APC extends Driver { ...@@ -58,13 +12,11 @@ class APC extends Driver {
/** /**
* Create a new APC cache driver instance. * Create a new APC cache driver instance.
* *
* @param APC_Engine $apc * @param string $key
* @param string $key
* @return void * @return void
*/ */
public function __construct(APC_Engine $apc, $key) public function __construct($key)
{ {
$this->apc = $apc;
$this->key = $key; $this->key = $key;
} }
...@@ -87,7 +39,7 @@ class APC extends Driver { ...@@ -87,7 +39,7 @@ class APC extends Driver {
*/ */
protected function retrieve($key) protected function retrieve($key)
{ {
if ( ! is_null($cache = $this->apc->fetch($this->key.$key))) return $cache; if ( ! is_null($cache = apc_fetch($this->key.$key))) return $cache;
} }
/** /**
...@@ -100,7 +52,7 @@ class APC extends Driver { ...@@ -100,7 +52,7 @@ class APC extends Driver {
*/ */
public function put($key, $value, $minutes) public function put($key, $value, $minutes)
{ {
$this->apc->store($this->key.$key, $value, $minutes * 60); apc_store($this->key.$key, $value, $minutes * 60);
} }
/** /**
...@@ -111,7 +63,7 @@ class APC extends Driver { ...@@ -111,7 +63,7 @@ class APC extends Driver {
*/ */
public function forget($key) public function forget($key)
{ {
$this->apc->delete($this->key.$key); apc_delete($this->key.$key);
} }
} }
\ No newline at end of file
<?php namespace Laravel\Cache\Drivers; <?php namespace Laravel\Cache\Drivers;
class File extends Driver { use Laravel\File as F;
/** class File extends Driver {
* The file engine instance.
*
* @var Laravel\File
*/
private $file;
/** /**
* The path to which the cache files should be written. * The path to which the cache files should be written.
...@@ -19,13 +14,11 @@ class File extends Driver { ...@@ -19,13 +14,11 @@ class File extends Driver {
/** /**
* Create a new File cache driver instance. * Create a new File cache driver instance.
* *
* @param Laravel\File $file * @param string $path
* @param string $path
* @return void * @return void
*/ */
public function __construct(\Laravel\File $file, $path) public function __construct($path)
{ {
$this->file = $file;
$this->path = $path; $this->path = $path;
} }
...@@ -48,9 +41,9 @@ class File extends Driver { ...@@ -48,9 +41,9 @@ class File extends Driver {
*/ */
protected function retrieve($key) protected function retrieve($key)
{ {
if ( ! $this->file->exists($this->path.$key)) return null; if ( ! F::exists($this->path.$key)) return null;
if (time() >= substr($cache = $this->file->get($this->path.$key), 0, 10)) if (time() >= substr($cache = F::get($this->path.$key), 0, 10))
{ {
return $this->forget($key); return $this->forget($key);
} }
...@@ -68,7 +61,7 @@ class File extends Driver { ...@@ -68,7 +61,7 @@ class File extends Driver {
*/ */
public function put($key, $value, $minutes) public function put($key, $value, $minutes)
{ {
$this->file->put($this->path.$key, (time() + ($minutes * 60)).serialize($value)); F::put($this->path.$key, (time() + ($minutes * 60)).serialize($value));
} }
/** /**
...@@ -79,7 +72,7 @@ class File extends Driver { ...@@ -79,7 +72,7 @@ class File extends Driver {
*/ */
public function forget($key) public function forget($key)
{ {
$this->file->delete($this->path.$key); F::delete($this->path.$key);
} }
} }
\ No newline at end of file
...@@ -9,24 +9,24 @@ class Config { ...@@ -9,24 +9,24 @@ class Config {
* *
* @var array * @var array
*/ */
protected $items = array(); protected static $items = array();
/** /**
* The paths to the configuration files. * The paths to the configuration files.
* *
* @var array * @var array
*/ */
protected $paths = array(); protected static $paths = array();
/** /**
* Create a new configuration manager instance. * Set the paths in which the configuration files are located.
* *
* @param array $paths * @param array $paths
* @return void * @return void
*/ */
public function __construct($paths) public static function paths($paths)
{ {
$this->paths = $paths; static::$paths = $paths;
} }
/** /**
...@@ -43,9 +43,9 @@ class Config { ...@@ -43,9 +43,9 @@ class Config {
* @param string $key * @param string $key
* @return bool * @return bool
*/ */
public function has($key) public static function has($key)
{ {
return ! is_null($this->get($key)); return ! is_null(static::get($key));
} }
/** /**
...@@ -74,21 +74,21 @@ class Config { ...@@ -74,21 +74,21 @@ class Config {
* @param string $default * @param string $default
* @return array * @return array
*/ */
public function get($key, $default = null) public static function get($key, $default = null)
{ {
list($file, $key) = $this->parse($key); list($file, $key) = static::parse($key);
if ( ! $this->load($file)) if ( ! static::load($file))
{ {
return ($default instanceof \Closure) ? call_user_func($default) : $default; return ($default instanceof \Closure) ? call_user_func($default) : $default;
} }
if (is_null($key)) if (is_null($key))
{ {
return $this->items[$file]; return static::$items[$file];
} }
return Arr::get($this->items[$file], $key, $default); return Arr::get(static::$items[$file], $key, $default);
} }
/** /**
...@@ -113,19 +113,19 @@ class Config { ...@@ -113,19 +113,19 @@ class Config {
* @param mixed $value * @param mixed $value
* @return void * @return void
*/ */
public function set($key, $value) public static function set($key, $value)
{ {
list($file, $key) = $this->parse($key); list($file, $key) = static::parse($key);
$this->load($file); static::load($file);
if (is_null($key)) if (is_null($key))
{ {
Arr::set($this->items, $file, $value); Arr::set(static::$items, $file, $value);
} }
else else
{ {
Arr::set($this->items[$file], $key, $value); Arr::set(static::$items[$file], $key, $value);
} }
} }
...@@ -142,7 +142,7 @@ class Config { ...@@ -142,7 +142,7 @@ class Config {
* @param string $key * @param string $key
* @return array * @return array
*/ */
protected function parse($key) protected static function parse($key)
{ {
$segments = explode('.', $key); $segments = explode('.', $key);
...@@ -164,13 +164,13 @@ class Config { ...@@ -164,13 +164,13 @@ class Config {
* @param string $file * @param string $file
* @return bool * @return bool
*/ */
protected function load($file) protected static function load($file)
{ {
if (isset($this->items[$file])) return true; if (isset(static::$items[$file])) return true;
$config = array(); $config = array();
foreach ($this->paths as $directory) foreach (static::$paths as $directory)
{ {
if (file_exists($path = $directory.$file.EXT)) if (file_exists($path = $directory.$file.EXT))
{ {
...@@ -180,10 +180,10 @@ class Config { ...@@ -180,10 +180,10 @@ class Config {
if (count($config) > 0) if (count($config) > 0)
{ {
$this->items[$file] = $config; static::$items[$file] = $config;
} }
return isset($this->items[$file]); return isset(static::$items[$file]);
} }
} }
\ No newline at end of file
...@@ -8,64 +8,15 @@ return array( ...@@ -8,64 +8,15 @@ return array(
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'laravel.asset' => array('singleton' => true, 'resolver' => function($c)
{
return new Asset($c->resolve('laravel.html'));
}),
'laravel.auth' => array('singleton' => true, 'resolver' => function($c) 'laravel.auth' => array('singleton' => true, 'resolver' => function($c)
{ {
return new Security\Auth($c->resolve('laravel.config'), $c->resolve('laravel.session')); return new Security\Auth($c->resolve('laravel.session'));
}),
'laravel.config' => array('singleton' => true, 'resolver' => function($c)
{
$paths = array(SYS_CONFIG_PATH, CONFIG_PATH);
if (isset($_SERVER['LARAVEL_ENV']))
{
$paths[] = CONFIG_PATH.$_SERVER['LARAVEL_ENV'].'/';
}
return new Config($paths);
}), }),
'laravel.crypter' => array('resolver' => function($c) 'laravel.crypter' => array('resolver' => function($c)
{ {
return new Security\Crypter(MCRYPT_RIJNDAEL_256, 'cbc', $c->resolve('laravel.config')->get('application.key')); return new Security\Crypter(MCRYPT_RIJNDAEL_256, 'cbc', Config::get('application.key'));
}),
'laravel.cookie' => array('singleton' => true, 'resolver' => function()
{
return new Cookie($_COOKIE);
}),
'laravel.database' => array('singleton' => true, 'resolver' => function($c)
{
return new Database\Manager($c->resolve('laravel.config'));
}),
'laravel.download' => array('singleton' => true, 'resolver' => function($c)
{
return new Download($c->resolve('laravel.file'));
}),
'laravel.file' => array('singleton' => true, 'resolver' => function($c)
{
return new File($c->resolve('laravel.config')->get('mimes'));
}),
'laravel.form' => array('singleton' => true, 'resolver' => function($c)
{
return new Form($c->resolve('laravel.request'), $c->resolve('laravel.html'), $c->resolve('laravel.url'));
}), }),
...@@ -74,130 +25,6 @@ return array( ...@@ -74,130 +25,6 @@ return array(
return new Security\Hashing\Bcrypt(8, false); return new Security\Hashing\Bcrypt(8, false);
}), }),
'laravel.html' => array('singleton' => true, 'resolver' => function($c)
{
return new HTML($c->resolve('laravel.url'), $c->resolve('laravel.config')->get('application.encoding'));
}),
'laravel.input' => array('singleton' => true, 'resolver' => function($c)
{
list($file, $cookie, $input, $files) = array(
$c->resolve('laravel.file'),
$c->resolve('laravel.cookie'),
$c->resolve('laravel.input.array'),
$_FILES,
);
return new Input($file, $cookie, $input, $files);
}),
'laravel.input.array' => array('singleton' => true, 'resolver' => function($c)
{
$input = array();
switch ($c->resolve('laravel.request')->method())
{
case 'GET':
$input = $_GET;
break;
case 'POST':
$input = $_POST;
break;
case 'PUT':
case 'DELETE':
if ($c->resolve('laravel.request')->spoofed())
{
$input = $_POST;
}
else
{
parse_str(file_get_contents('php://input'), $input);
}
}
unset($input[Request::spoofer]);
return $input;
}),
'laravel.lang' => array('singleton' => true, 'resolver' => function($c)
{
require_once SYS_PATH.'lang'.EXT;
return new Lang_Factory($c->resolve('laravel.config'), array(SYS_LANG_PATH, LANG_PATH));
}),
'laravel.loader' => array('singleton' => true, 'resolver' => function($c)
{
require_once SYS_PATH.'loader'.EXT;
$aliases = $c->resolve('laravel.config')->get('aliases');
return new Loader(array(BASE_PATH, APP_PATH.'models/', APP_PATH), $aliases);
}),
'laravel.redirect' => array('singleton' => true, 'resolver' => function($c)
{
return new Redirect($c->resolve('laravel.url'));
}),
'laravel.request' => array('singleton' => true, 'resolver' => function($c)
{
return new Request($c->resolve('laravel.uri')->get(), $_SERVER, $_POST);
}),
'laravel.response' => array('singleton' => true, 'resolver' => function($c)
{
require_once SYS_PATH.'response'.EXT;
return new Response_Factory($c->resolve('laravel.view'), $c->resolve('laravel.file'));
}),
'laravel.uri' => array('singleton' => true, 'resolver' => function($c)
{
return new URI($_SERVER, $c->resolve('laravel.config')->get('application.url'));
}),
'laravel.url' => array('singleton' => true, 'resolver' => function($c)
{
list($router, $request, $base, $index) = array(
$c->resolve('laravel.routing.router'),
$c->resolve('laravel.request'),
$c->resolve('laravel.config')->get('application.url'),
$c->resolve('laravel.config')->get('application.index'),
);
return new URL($router, $base, $index, $request->secure());
}),
'laravel.validator' => array('singleton' => true, 'resolver' => function($c)
{
require_once SYS_PATH.'validation/validator'.EXT;
return new Validation\Validator_Factory($c->resolve('laravel.lang'));
}),
'laravel.view' => array('singleton' => true, 'resolver' => function($c)
{
require_once SYS_PATH.'view'.EXT;
return new View_Factory(new View_Composer(require APP_PATH.'composers'.EXT), VIEW_PATH);
}),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Laravel Routing Components | Laravel Routing Components
...@@ -229,31 +56,25 @@ return array( ...@@ -229,31 +56,25 @@ return array(
'laravel.cache' => array('singleton' => true, 'resolver' => function($c) 'laravel.cache' => array('singleton' => true, 'resolver' => function($c)
{ {
return new Cache\Manager($c, $c->resolve('laravel.config')->get('cache.driver')); return new Cache\Manager($c, Config::get('cache.driver'));
}), }),
'laravel.cache.apc' => array('resolver' => function($c) 'laravel.cache.apc' => array('resolver' => function($c)
{ {
require_once SYS_PATH.'cache/drivers/apc'.EXT; return new Cache\Drivers\APC(Config::get('cache.key'));
$key = $c->resolve('laravel.config')->get('cache.key');
return new Cache\Drivers\APC(new Cache\Drivers\APC_Engine, $key);
}), }),
'laravel.cache.file' => array('resolver' => function($c) 'laravel.cache.file' => array('resolver' => function($c)
{ {
return new Cache\Drivers\File($c->resolve('laravel.file'), CACHE_PATH); return new Cache\Drivers\File(CACHE_PATH);
}), }),
'laravel.cache.memcached' => array('resolver' => function($c) 'laravel.cache.memcached' => array('resolver' => function($c)
{ {
$key = $c->resolve('laravel.config')->get('cache.key'); return new Cache\Drivers\Memcached($c->resolve('laravel.cache.memcache.connection'), Config::get('cache.key'));
return new Cache\Drivers\Memcached($c->resolve('laravel.cache.memcache.connection'), $key);
}), }),
...@@ -261,7 +82,7 @@ return array( ...@@ -261,7 +82,7 @@ return array(
{ {
$memcache = new \Memcache; $memcache = new \Memcache;
foreach ($c->resolve('laravel.config')->get('cache.servers') as $server) foreach (Config::get('cache.servers') as $server)
{ {
$memcache->addServer($server['host'], $server['port'], true, $server['weight']); $memcache->addServer($server['host'], $server['port'], true, $server['weight']);
} }
...@@ -282,23 +103,21 @@ return array( ...@@ -282,23 +103,21 @@ return array(
'laravel.session.id' => array('singleton' => true, 'resolver' => function($c) 'laravel.session.id' => array('singleton' => true, 'resolver' => function($c)
{ {
return $c->resolve('laravel.cookie')->get('laravel_session'); return Cookie::get('laravel_session');
}), }),
'laravel.session.manager' => array('singleton' => true, 'resolver' => function($c) 'laravel.session.manager' => array('singleton' => true, 'resolver' => function($c)
{ {
$config = $c->resolve('laravel.config'); $driver = $c->resolve('laravel.session.'.Config::get('session.driver'));
$driver = $c->resolve('laravel.session.'.$config->get('session.driver'));
return new Session\Manager($driver, $c->resolve('laravel.session.transporter'), $config); return new Session\Manager($driver, $c->resolve('laravel.session.transporter'));
}), }),
'laravel.session.transporter' => array('resolver' => function($c) 'laravel.session.transporter' => array('resolver' => function($c)
{ {
return new Session\Transporters\Cookie($c->resolve('laravel.cookie')); return new Session\Transporters\Cookie;
}), }),
...@@ -318,13 +137,13 @@ return array( ...@@ -318,13 +137,13 @@ return array(
'laravel.session.database' => array('resolver' => function($c) 'laravel.session.database' => array('resolver' => function($c)
{ {
return new Session\Drivers\Database($c->resolve('laravel.database')->connection()); return new Session\Drivers\Database(Database\Manager::connection());
}), }),
'laravel.session.file' => array('resolver' => function($c) 'laravel.session.file' => array('resolver' => function($c)
{ {
return new Session\Drivers\File($c->resolve('laravel.file'), SESSION_PATH); return new Session\Drivers\File(SESSION_PATH);
}), }),
......
...@@ -21,7 +21,7 @@ abstract class Controller { ...@@ -21,7 +21,7 @@ abstract class Controller {
*/ */
public function __call($method, $parameters) public function __call($method, $parameters)
{ {
return IoC::container()->resolve('laravel.response')->error('404'); return Response::error('404');
} }
/** /**
......
...@@ -2,30 +2,12 @@ ...@@ -2,30 +2,12 @@
class Cookie { class Cookie {
/**
* All of the cookies for the current request.
*
* @var array
*/
protected $cookies;
/** /**
* The cookies that will be sent to the browser at the end of the request. * The cookies that will be sent to the browser at the end of the request.
* *
* @var array * @var array
*/ */
protected $queue = array(); protected static $queue = array();
/**
* Create a new cookie manager instance.
*
* @param array $cookies
* @return void
*/
public function __construct(&$cookies)
{
$this->cookies = &$cookies;
}
/** /**
* Determine if a cookie exists. * Determine if a cookie exists.
...@@ -33,9 +15,9 @@ class Cookie { ...@@ -33,9 +15,9 @@ class Cookie {
* @param string $name * @param string $name
* @return bool * @return bool
*/ */
public function has($name) public static function has($name)
{ {
return ! is_null($this->get($name)); return ! is_null(static::get($name));
} }
/** /**
...@@ -53,9 +35,9 @@ class Cookie { ...@@ -53,9 +35,9 @@ class Cookie {
* @param mixed $default * @param mixed $default
* @return string * @return string
*/ */
public function get($name, $default = null) public static function get($name, $default = null)
{ {
return Arr::get($this->cookies, $name, $default); return Arr::get($_COOKIE, $name, $default);
} }
/** /**
...@@ -69,9 +51,9 @@ class Cookie { ...@@ -69,9 +51,9 @@ class Cookie {
* @param bool $http_only * @param bool $http_only
* @return bool * @return bool
*/ */
public function forever($name, $value, $path = '/', $domain = null, $secure = false, $http_only = false) public static function forever($name, $value, $path = '/', $domain = null, $secure = false, $http_only = false)
{ {
return $this->put($name, $value, 2628000, $path, $domain, $secure, $http_only); return static::put($name, $value, 2628000, $path, $domain, $secure, $http_only);
} }
/** /**
...@@ -100,13 +82,13 @@ class Cookie { ...@@ -100,13 +82,13 @@ class Cookie {
* @param bool $http_only * @param bool $http_only
* @return bool * @return bool
*/ */
public function put($name, $value, $minutes = 0, $path = '/', $domain = null, $secure = false, $http_only = false) public static function put($name, $value, $minutes = 0, $path = '/', $domain = null, $secure = false, $http_only = false)
{ {
if ($minutes < 0) unset($this->cookies[$name]); if ($minutes < 0) unset($_COOKIE[$name]);
$time = ($minutes != 0) ? time() + ($minutes * 60) : 0; $time = ($minutes != 0) ? time() + ($minutes * 60) : 0;
$this->queue[] = compact('name', 'value', 'time', 'path', 'domain', 'secure', 'http_only'); static::$queue[] = compact('name', 'value', 'time', 'path', 'domain', 'secure', 'http_only');
} }
/** /**
...@@ -116,9 +98,9 @@ class Cookie { ...@@ -116,9 +98,9 @@ class Cookie {
* *
* @return void * @return void
*/ */
public function send() public static function send()
{ {
foreach ($this->queue as $cookie) foreach (static::$queue as $cookie)
{ {
call_user_func_array('setcookie', $cookie); call_user_func_array('setcookie', $cookie);
} }
...@@ -130,9 +112,9 @@ class Cookie { ...@@ -130,9 +112,9 @@ class Cookie {
* @param string $name * @param string $name
* @return bool * @return bool
*/ */
public function forget($name) public static function forget($name)
{ {
return $this->put($name, null, -60); return static::put($name, null, -60);
} }
} }
\ No newline at end of file
...@@ -36,50 +36,50 @@ define('VIEW_PATH', APP_PATH.'views/'); ...@@ -36,50 +36,50 @@ define('VIEW_PATH', APP_PATH.'views/');
// -------------------------------------------------------------- // --------------------------------------------------------------
require SYS_PATH.'facades'.EXT; require SYS_PATH.'facades'.EXT;
require SYS_PATH.'config'.EXT; require SYS_PATH.'config'.EXT;
require SYS_PATH.'loader'.EXT;
require SYS_PATH.'arr'.EXT; require SYS_PATH.'arr'.EXT;
// -------------------------------------------------------------- // --------------------------------------------------------------
// Bootstrap the IoC container. // Determine the application environment.
// -------------------------------------------------------------- // --------------------------------------------------------------
require SYS_PATH.'container'.EXT; $environment = (isset($_SERVER['LARAVEL_ENV'])) ? $_SERVER['LARAVEL_ENV'] : null;
$dependencies = require SYS_CONFIG_PATH.'container'.EXT; // --------------------------------------------------------------
// Register the configuration file paths.
// --------------------------------------------------------------
$config = array(SYS_CONFIG_PATH, CONFIG_PATH);
if (file_exists($path = CONFIG_PATH.'container'.EXT)) if ( ! is_null($environment)) $config[] = CONFIG_PATH.$environment.'/';
{
$dependencies = array_merge($dependencies, require $path);
}
$env = (isset($_SERVER['LARAVEL_ENV'])) ? $_SERVER['LARAVEL_ENV'] : null; Config::paths($config);
if ( ! is_null($env) and file_exists($path = CONFIG_PATH.$env.'/container'.EXT)) // --------------------------------------------------------------
{ // Bootstrap the IoC container.
$dependencies = array_merge($dependencies, require $path); // --------------------------------------------------------------
} require SYS_PATH.'container'.EXT;
$container = new Container($dependencies); $container = new Container(Config::get('container'));
IoC::$container = $container; IoC::$container = $container;
// -------------------------------------------------------------- // --------------------------------------------------------------
// Register the auto-loader on the auto-loader stack. // Register the auto-loader on the auto-loader stack.
// -------------------------------------------------------------- // --------------------------------------------------------------
spl_autoload_register(array($container->resolve('laravel.loader'), 'load')); spl_autoload_register(array('Laravel\\Loader', 'load'));
// -------------------------------------------------------------- Loader::$paths = array(BASE_PATH, APP_PATH.'models/', APP_PATH);
// Set the application environment configuration option.
// -------------------------------------------------------------- Loader::$aliases = Config::get('aliases');
$container->resolve('laravel.config')->set('application.env', $env);
// -------------------------------------------------------------- // --------------------------------------------------------------
// Define some convenient global functions. // Define some convenient global functions.
// -------------------------------------------------------------- // --------------------------------------------------------------
function e($value) function e($value)
{ {
return IoC::container()->resolve('laravel.html')->entities($value); return HTML::entities($value);
} }
function __($key, $replacements = array(), $language = null) function __($key, $replacements = array(), $language = null)
{ {
return IoC::container()->resolve('laravel.lang')->line($key, $replacements, $language); return Lang::line($key, $replacements, $language);
} }
\ No newline at end of file
...@@ -9,25 +9,7 @@ class Manager { ...@@ -9,25 +9,7 @@ class Manager {
* *
* @var array * @var array
*/ */
protected $connections = array(); protected static $connections = array();
/**
* The configuration manager instance.
*
* @var Config
*/
protected $config;
/**
* Create a new database manager instance.
*
* @param Connector $connector
* @return void
*/
public function __construct(Config $config)
{
$this->config = $config;
}
/** /**
* Get a database connection. * Get a database connection.
...@@ -39,23 +21,23 @@ class Manager { ...@@ -39,23 +21,23 @@ class Manager {
* @param string $connection * @param string $connection
* @return Connection * @return Connection
*/ */
public function connection($connection = null) public static function connection($connection = null)
{ {
if (is_null($connection)) $connection = $this->config->get('database.default'); if (is_null($connection)) $connection = Config::get('database.default');
if ( ! array_key_exists($connection, $this->connections)) if ( ! array_key_exists($connection, static::$connections))
{ {
$config = $this->config->get("database.connections.{$connection}"); $config = Config::get("database.connections.{$connection}");
if (is_null($config)) if (is_null($config))
{ {
throw new \Exception("Database connection configuration is not defined for connection [$connection]."); throw new \Exception("Database connection configuration is not defined for connection [$connection].");
} }
$this->connections[$connection] = new Connection($this->connect($config), $config); static::$connections[$connection] = new Connection(static::connect($config), $config);
} }
return $this->connections[$connection]; return static::$connections[$connection];
} }
/** /**
...@@ -64,7 +46,7 @@ class Manager { ...@@ -64,7 +46,7 @@ class Manager {
* @param array $config * @param array $config
* @return PDO * @return PDO
*/ */
protected function connect($config) protected static function connect($config)
{ {
if (isset($config['connector'])) { return call_user_func($config['connector'], $config); } if (isset($config['connector'])) { return call_user_func($config['connector'], $config); }
...@@ -96,9 +78,9 @@ class Manager { ...@@ -96,9 +78,9 @@ class Manager {
* @param string $connection * @param string $connection
* @return Queries\Query * @return Queries\Query
*/ */
public function table($table, $connection = null) public static function table($table, $connection = null)
{ {
return $this->connection($connection)->table($table); return static::connection($connection)->table($table);
} }
/** /**
...@@ -106,9 +88,9 @@ class Manager { ...@@ -106,9 +88,9 @@ class Manager {
* *
* This provides a convenient API for querying or examining the default database connection. * This provides a convenient API for querying or examining the default database connection.
*/ */
public function __call($method, $parameters) public static function __callStatic($method, $parameters)
{ {
return call_user_func_array(array($this->connection(), $method), $parameters); return call_user_func_array(array(static::connection(), $method), $parameters);
} }
} }
\ No newline at end of file
...@@ -32,27 +32,9 @@ abstract class Facade { ...@@ -32,27 +32,9 @@ abstract class Facade {
} }
class Asset extends Facade { public static $resolve = 'laravel.asset'; }
class Auth extends Facade { public static $resolve = 'laravel.auth'; } class Auth extends Facade { public static $resolve = 'laravel.auth'; }
class Cache extends Facade { public static $resolve = 'laravel.cache'; } class Cache extends Facade { public static $resolve = 'laravel.cache'; }
class Config extends Facade { public static $resolve = 'laravel.config'; }
class Cookie extends Facade { public static $resolve = 'laravel.cookie'; }
class Crypter extends Facade { public static $resolve = 'laravel.crypter'; } class Crypter extends Facade { public static $resolve = 'laravel.crypter'; }
class DB extends Facade { public static $resolve = 'laravel.database'; }
class Download extends Facade { public static $resolve = 'laravel.download'; }
class File extends Facade { public static $resolve = 'laravel.file'; }
class Form extends Facade { public static $resolve = 'laravel.form'; }
class Hasher extends Facade { public static $resolve = 'laravel.hasher'; } class Hasher extends Facade { public static $resolve = 'laravel.hasher'; }
class HTML extends Facade { public static $resolve = 'laravel.html'; }
class Input extends Facade { public static $resolve = 'laravel.input'; }
class Lang extends Facade { public static $resolve = 'laravel.lang'; }
class Loader extends Facade { public static $resolve = 'laravel.loader'; }
class Package extends Facade { public static $resolve = 'laravel.package'; } class Package extends Facade { public static $resolve = 'laravel.package'; }
class Redirect extends Facade { public static $resolve = 'laravel.redirect'; } class Session extends Facade { public static $resolve = 'laravel.session'; }
class Request extends Facade { public static $resolve = 'laravel.request'; } \ No newline at end of file
class Response extends Facade { public static $resolve = 'laravel.response'; }
class Session extends Facade { public static $resolve = 'laravel.session'; }
class URI extends Facade { public static $resolve = 'laravel.uri'; }
class URL extends Facade { public static $resolve = 'laravel.url'; }
class Validator extends Facade { public static $resolve = 'laravel.validator'; }
class View extends Facade { public static $resolve = 'laravel.view'; }
\ No newline at end of file
<?php namespace Laravel; <?php namespace Laravel;
/**
* While this class may appear totally useless. It is actually quite helpful for dealing with
* the global scope of the PHP file functions. Injecting this class into the classes that need
* access to these functions allows us to test the classes without hitting the actual file system.
*/
class File { class File {
/**
* All of the MIME types understood by the manager.
*
* @var array
*/
private $mimes;
/**
* Create a new file engine instance.
*
* @param array $mimes
* @return void
*/
public function __construct($mimes)
{
$this->mimes = $mimes;
}
/** /**
* Determine if a file exists. * Determine if a file exists.
* *
* @param string $path * @param string $path
* @return bool * @return bool
*/ */
public function exists($path) public static function exists($path)
{ {
return file_exists($path); return file_exists($path);
} }
...@@ -42,7 +19,7 @@ class File { ...@@ -42,7 +19,7 @@ class File {
* @param string $path * @param string $path
* @return string * @return string
*/ */
public function get($path) public static function get($path)
{ {
return file_get_contents($path); return file_get_contents($path);
} }
...@@ -54,7 +31,7 @@ class File { ...@@ -54,7 +31,7 @@ class File {
* @param string $data * @param string $data
* @return int * @return int
*/ */
public function put($path, $data) public static function put($path, $data)
{ {
return file_put_contents($path, $data, LOCK_EX); return file_put_contents($path, $data, LOCK_EX);
} }
...@@ -66,7 +43,7 @@ class File { ...@@ -66,7 +43,7 @@ class File {
* @param string $data * @param string $data
* @return int * @return int
*/ */
public function append($path, $data) public static function append($path, $data)
{ {
return file_put_contents($path, $data, LOCK_EX | FILE_APPEND); return file_put_contents($path, $data, LOCK_EX | FILE_APPEND);
} }
...@@ -77,9 +54,9 @@ class File { ...@@ -77,9 +54,9 @@ class File {
* @param string $path * @param string $path
* @return void * @return void
*/ */
public function delete($path) public static function delete($path)
{ {
if ($this->exists($path)) @unlink($path); if (static::exists($path)) @unlink($path);
} }
/** /**
...@@ -88,7 +65,7 @@ class File { ...@@ -88,7 +65,7 @@ class File {
* @param string $path * @param string $path
* @return string * @return string
*/ */
public function extension($path) public static function extension($path)
{ {
return pathinfo($path, PATHINFO_EXTENSION); return pathinfo($path, PATHINFO_EXTENSION);
} }
...@@ -99,7 +76,7 @@ class File { ...@@ -99,7 +76,7 @@ class File {
* @param string $path * @param string $path
* @return string * @return string
*/ */
public function type($path) public static function type($path)
{ {
return filetype($path); return filetype($path);
} }
...@@ -110,7 +87,7 @@ class File { ...@@ -110,7 +87,7 @@ class File {
* @param string $file * @param string $file
* @return int * @return int
*/ */
public function size($path) public static function size($path)
{ {
return filesize($path); return filesize($path);
} }
...@@ -121,7 +98,7 @@ class File { ...@@ -121,7 +98,7 @@ class File {
* @param string $path * @param string $path
* @return int * @return int
*/ */
public function modified($path) public static function modified($path)
{ {
return filemtime($path); return filemtime($path);
} }
...@@ -134,7 +111,7 @@ class File { ...@@ -134,7 +111,7 @@ class File {
* @param array $files * @param array $files
* @return bool * @return bool
*/ */
public function upload($key, $path, $files) public static function upload($key, $path, $files)
{ {
return move_uploaded_file($files[$key]['tmp_name'], $path); return move_uploaded_file($files[$key]['tmp_name'], $path);
} }
...@@ -153,11 +130,13 @@ class File { ...@@ -153,11 +130,13 @@ class File {
* @param string $default * @param string $default
* @return string * @return string
*/ */
public function mime($extension, $default = 'application/octet-stream') public static function mime($extension, $default = 'application/octet-stream')
{ {
if ( ! array_key_exists($extension, $this->mimes)) return $default; $mimes = Config::get('mimes');
if ( ! array_key_exists($extension, $mimes)) return $default;
return (is_array($this->mimes[$extension])) ? $this->mimes[$extension][0] : $this->mimes[$extension]; return (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
} }
/** /**
...@@ -177,13 +156,15 @@ class File { ...@@ -177,13 +156,15 @@ class File {
* @param string $path * @param string $path
* @return bool * @return bool
*/ */
public function is($extensions, $path) public static function is($extensions, $path)
{ {
$mimes = Config::get('mimes');
foreach ((array) $extensions as $extension) foreach ((array) $extensions as $extension)
{ {
$mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path); $mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path);
if (isset($this->mimes[$extension]) and in_array((array) $this->mimes[$extension])) return true; if (isset($mimes[$extension]) and in_array((array) $mimes[$extension])) return true;
} }
return false; return false;
......
This diff is collapsed.
...@@ -2,32 +2,6 @@ ...@@ -2,32 +2,6 @@
class HTML { class HTML {
/**
* The encoding being used by the application.
*
* @var string
*/
protected $encoding;
/**
* The URL generator instance.
*
* @var URL
*/
protected $url;
/**
* Create a new HTML writer instance.
*
* @param string $encoding
* @return void
*/
public function __construct(URL $url, $encoding)
{
$this->url = $url;
$this->encoding = $encoding;
}
/** /**
* Convert HTML characters to entities. * Convert HTML characters to entities.
* *
...@@ -36,9 +10,9 @@ class HTML { ...@@ -36,9 +10,9 @@ class HTML {
* @param string $value * @param string $value
* @return string * @return string
*/ */
public function entities($value) public static function entities($value)
{ {
return htmlentities($value, ENT_QUOTES, $this->encoding, false); return htmlentities($value, ENT_QUOTES, Config::get('application.encoding'), false);
} }
/** /**
...@@ -56,11 +30,11 @@ class HTML { ...@@ -56,11 +30,11 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function script($url, $attributes = array()) public static function script($url, $attributes = array())
{ {
$url = $this->entities($this->url->to_asset($url)); $url = static::entities(URL::to_asset($url));
return '<script type="text/javascript" src="'.$url.'"'.$this->attributes($attributes).'></script>'.PHP_EOL; return '<script type="text/javascript" src="'.$url.'"'.static::attributes($attributes).'></script>'.PHP_EOL;
} }
/** /**
...@@ -80,13 +54,13 @@ class HTML { ...@@ -80,13 +54,13 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function style($url, $attributes = array()) public static function style($url, $attributes = array())
{ {
if ( ! array_key_exists('media', $attributes)) $attributes['media'] = 'all'; if ( ! array_key_exists('media', $attributes)) $attributes['media'] = 'all';
$attributes = array_merge($attributes, array('rel' => 'stylesheet', 'type' => 'text/css')); $attributes = array_merge($attributes, array('rel' => 'stylesheet', 'type' => 'text/css'));
return '<link href="'.$this->entities($this->url->to_asset($url)).'"'.$this->attributes($attributes).'>'.PHP_EOL; return '<link href="'.static::entities(URL::to_asset($url)).'"'.static::attributes($attributes).'>'.PHP_EOL;
} }
/** /**
...@@ -104,9 +78,9 @@ class HTML { ...@@ -104,9 +78,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function span($value, $attributes = array()) public static function span($value, $attributes = array())
{ {
return '<span'.$this->attributes($attributes).'>'.$this->entities($value).'</span>'; return '<span'.static::attributes($attributes).'>'.static::entities($value).'</span>';
} }
/** /**
...@@ -127,11 +101,11 @@ class HTML { ...@@ -127,11 +101,11 @@ class HTML {
* @param bool $asset * @param bool $asset
* @return string * @return string
*/ */
public function link($url, $title, $attributes = array(), $https = false, $asset = false) public static function link($url, $title, $attributes = array(), $https = false, $asset = false)
{ {
$url = $this->entities($this->url->to($url, $https, $asset)); $url = static::entities(URL::to($url, $https, $asset));
return '<a href="'.$url.'"'.$this->attributes($attributes).'>'.$this->entities($title).'</a>'; return '<a href="'.$url.'"'.static::attributes($attributes).'>'.static::entities($title).'</a>';
} }
/** /**
...@@ -142,9 +116,9 @@ class HTML { ...@@ -142,9 +116,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function link_to_secure($url, $title, $attributes = array()) public static function link_to_secure($url, $title, $attributes = array())
{ {
return $this->link($url, $title, $attributes, true); return static::link($url, $title, $attributes, true);
} }
/** /**
...@@ -157,9 +131,9 @@ class HTML { ...@@ -157,9 +131,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function link_to_asset($url, $title, $attributes = array(), $https = false) public static function link_to_asset($url, $title, $attributes = array(), $https = false)
{ {
return $this->link($url, $title, $attributes, $https, true); return static::link($url, $title, $attributes, $https, true);
} }
/** /**
...@@ -170,9 +144,9 @@ class HTML { ...@@ -170,9 +144,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function link_to_secure_asset($url, $title, $attributes = array()) public static function link_to_secure_asset($url, $title, $attributes = array())
{ {
return $this->link_to_asset($url, $title, $attributes, true); return static::link_to_asset($url, $title, $attributes, true);
} }
/** /**
...@@ -195,9 +169,9 @@ class HTML { ...@@ -195,9 +169,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function link_to_route($name, $title, $parameters = array(), $attributes = array(), $https = false) public static function link_to_route($name, $title, $parameters = array(), $attributes = array(), $https = false)
{ {
return $this->link($this->url->to_route($name, $parameters, $https), $title, $attributes); return static::link(URL::to_route($name, $parameters, $https), $title, $attributes);
} }
/** /**
...@@ -209,9 +183,9 @@ class HTML { ...@@ -209,9 +183,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function link_to_secure_route($name, $title, $parameters = array(), $attributes = array()) public static function link_to_secure_route($name, $title, $parameters = array(), $attributes = array())
{ {
return $this->link_to_route($name, $title, $parameters, $attributes, true); return static::link_to_route($name, $title, $parameters, $attributes, true);
} }
/** /**
...@@ -235,15 +209,15 @@ class HTML { ...@@ -235,15 +209,15 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function mailto($email, $title = null, $attributes = array()) public static function mailto($email, $title = null, $attributes = array())
{ {
$email = $this->email($email); $email = static::email($email);
if (is_null($title)) $title = $email; if (is_null($title)) $title = $email;
$email = '&#109;&#097;&#105;&#108;&#116;&#111;&#058;'.$email; $email = '&#109;&#097;&#105;&#108;&#116;&#111;&#058;'.$email;
return '<a href="'.$email.'"'.$this->attributes($attributes).'>'.$this->entities($title).'</a>'; return '<a href="'.$email.'"'.static::attributes($attributes).'>'.static::entities($title).'</a>';
} }
/** /**
...@@ -252,9 +226,9 @@ class HTML { ...@@ -252,9 +226,9 @@ class HTML {
* @param string $email * @param string $email
* @return string * @return string
*/ */
public function email($email) public static function email($email)
{ {
return str_replace('@', '&#64;', $this->obfuscate($email)); return str_replace('@', '&#64;', static::obfuscate($email));
} }
/** /**
...@@ -276,11 +250,11 @@ class HTML { ...@@ -276,11 +250,11 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function image($url, $alt = '', $attributes = array()) public static function image($url, $alt = '', $attributes = array())
{ {
$attributes['alt'] = $alt; $attributes['alt'] = $alt;
return '<img src="'.$this->entities($this->url->to_asset($url)).'"'.$this->attributes($attributes).'>'; return '<img src="'.static::entities(URL::to_asset($url)).'"'.static::attributes($attributes).'>';
} }
/** /**
...@@ -298,9 +272,9 @@ class HTML { ...@@ -298,9 +272,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function ol($list, $attributes = array()) public static function ol($list, $attributes = array())
{ {
return $this->list_elements('ol', $list, $attributes); return static::list_elements('ol', $list, $attributes);
} }
/** /**
...@@ -318,9 +292,9 @@ class HTML { ...@@ -318,9 +292,9 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function ul($list, $attributes = array()) public static function ul($list, $attributes = array())
{ {
return $this->list_elements('ul', $list, $attributes); return static::list_elements('ul', $list, $attributes);
} }
/** /**
...@@ -331,16 +305,16 @@ class HTML { ...@@ -331,16 +305,16 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
private function list_elements($type, $list, $attributes = array()) private static function list_elements($type, $list, $attributes = array())
{ {
$html = ''; $html = '';
foreach ($list as $key => $value) foreach ($list as $key => $value)
{ {
$html .= (is_array($value)) ? $this->list_elements($type, $value) : '<li>'.$this->entities($value).'</li>'; $html .= (is_array($value)) ? static::list_elements($type, $value) : '<li>'.static::entities($value).'</li>';
} }
return '<'.$type.$this->attributes($attributes).'>'.$html.'</'.$type.'>'; return '<'.$type.static::attributes($attributes).'>'.$html.'</'.$type.'>';
} }
/** /**
...@@ -349,7 +323,7 @@ class HTML { ...@@ -349,7 +323,7 @@ class HTML {
* @param array $attributes * @param array $attributes
* @return string * @return string
*/ */
public function attributes($attributes) public static function attributes($attributes)
{ {
$html = array(); $html = array();
...@@ -361,7 +335,7 @@ class HTML { ...@@ -361,7 +335,7 @@ class HTML {
if ( ! is_null($value)) if ( ! is_null($value))
{ {
$html[] = $key.'="'.$this->entities($value).'"'; $html[] = $key.'="'.static::entities($value).'"';
} }
} }
...@@ -374,7 +348,7 @@ class HTML { ...@@ -374,7 +348,7 @@ class HTML {
* @param string $value * @param string $value
* @return string * @return string
*/ */
public function obfuscate($value) public static function obfuscate($value)
{ {
$safe = ''; $safe = '';
...@@ -420,20 +394,20 @@ class HTML { ...@@ -420,20 +394,20 @@ class HTML {
* echo HTML::link_to_secure_posts('Posts', array($year, $month)); * echo HTML::link_to_secure_posts('Posts', array($year, $month));
* </code> * </code>
*/ */
public function __call($method, $parameters) public static function __callStatic($method, $parameters)
{ {
if (strpos($method, 'link_to_secure_') === 0) if (strpos($method, 'link_to_secure_') === 0)
{ {
array_unshift($parameters, substr($method, 15)); array_unshift($parameters, substr($method, 15));
return call_user_func_array(array($this, 'link_to_secure_route'), $parameters); return forward_static_call_array('HTML::link_to_secure_route', $parameters);
} }
if (strpos($method, 'link_to_') === 0) if (strpos($method, 'link_to_') === 0)
{ {
array_unshift($parameters, substr($method, 8)); array_unshift($parameters, substr($method, 8));
return call_user_func_array(array($this, 'link_to_route'), $parameters); return forward_static_call_array('HTML::link_to_route', $parameters);
} }
throw new \Exception("Method [$method] is not defined on the HTML class."); throw new \Exception("Method [$method] is not defined on the HTML class.");
......
...@@ -2,50 +2,12 @@ ...@@ -2,50 +2,12 @@
class Input { class Input {
/**
* The file manager instance.
*
* @var File
*/
protected $file;
/** /**
* The applicable input for the request. * The applicable input for the request.
* *
* @var array * @var array
*/ */
protected $input; public static $input;
/**
* The $_FILES array for the request.
*
* @var array
*/
protected $files;
/**
* The cookie engine instance.
*
* @var Cookie
*/
public $cookies;
/**
* Create a new Input manager instance.
*
* @param File $file
* @param Cookie $cookies
* @param array $input
* @param array $files
* @return void
*/
public function __construct(File $file, Cookie $cookies, $input, $files)
{
$this->file = $file;
$this->input = $input;
$this->files = $files;
$this->cookies = $cookies;
}
/** /**
* Get all of the input data for the request. * Get all of the input data for the request.
...@@ -54,9 +16,9 @@ class Input { ...@@ -54,9 +16,9 @@ class Input {
* *
* @return array * @return array
*/ */
public function all() public static function all()
{ {
return array_merge($this->get(), $this->file()); return array_merge(static::get(), static::file());
} }
/** /**
...@@ -65,9 +27,9 @@ class Input { ...@@ -65,9 +27,9 @@ class Input {
* @param string $key * @param string $key
* @return bool * @return bool
*/ */
public function has($key) public static function has($key)
{ {
return ( ! is_null($this->get($key)) and trim((string) $this->get($key)) !== ''); return ( ! is_null(static::get($key)) and trim((string) static::get($key)) !== '');
} }
/** /**
...@@ -87,9 +49,9 @@ class Input { ...@@ -87,9 +49,9 @@ class Input {
* @param mixed $default * @param mixed $default
* @return mixed * @return mixed
*/ */
public function get($key = null, $default = null) public static function get($key = null, $default = null)
{ {
return Arr::get($this->input, $key, $default); return Arr::get(static::$input, $key, $default);
} }
/** /**
...@@ -98,9 +60,9 @@ class Input { ...@@ -98,9 +60,9 @@ class Input {
* @param string $key * @param string $key
* @return bool * @return bool
*/ */
public function had($key) public static function had($key)
{ {
return ( ! is_null($this->old($key)) and trim((string) $this->old($key)) !== ''); return ( ! is_null(static::old($key)) and trim((string) static::old($key)) !== '');
} }
/** /**
...@@ -118,9 +80,9 @@ class Input { ...@@ -118,9 +80,9 @@ class Input {
* @param mixed $default * @param mixed $default
* @return string * @return string
*/ */
public function old($key = null, $default = null) public static function old($key = null, $default = null)
{ {
if (IoC::container()->resolve('laravel.config')->get('session.driver') == '') if (Config::get('session.driver') == '')
{ {
throw new \Exception('A session driver must be specified in order to access old input.'); throw new \Exception('A session driver must be specified in order to access old input.');
} }
...@@ -147,9 +109,9 @@ class Input { ...@@ -147,9 +109,9 @@ class Input {
* @param mixed $default * @param mixed $default
* @return array * @return array
*/ */
public function file($key = null, $default = null) public static function file($key = null, $default = null)
{ {
return Arr::get($this->files, $key, $default); return Arr::get($_FILES, $key, $default);
} }
/** /**
...@@ -166,25 +128,40 @@ class Input { ...@@ -166,25 +128,40 @@ class Input {
* @param string $path * @param string $path
* @return bool * @return bool
*/ */
public function upload($key, $path) public static function upload($key, $path)
{ {
return array_key_exists($key, $this->files) ? $this->file->upload($key, $path, $this->files) : false; return array_key_exists($key, $_FILES) ? File::upload($key, $path, $_FILES) : false;
} }
/** }
* Magic Method for retrieving items from the request input.
* /**
* This method is particularly helpful in controllers where access to the IoC container * Set the input values for the current request.
* is provided through the controller's magic __get method. */
* $input = array();
* <code>
* // Retrieve the "name" input item from a controller method switch (Request::method())
* $name = $this->input->name; {
* </code> case 'GET':
*/ $input = $_GET;
public function __get($key) break;
{
return $this->get($key); case 'POST':
} $input = $_POST;
break;
case 'PUT':
case 'DELETE':
if (Request::spoofed())
{
$input = $_POST;
}
else
{
parse_str(file_get_contents('php://input'), $input);
}
}
unset($input[Request::spoofer]);
} Input::$input = $input;
\ No newline at end of file \ No newline at end of file
<?php namespace Laravel; <?php namespace Laravel;
class Lang_Factory {
/**
* The configuration manager instance.
*
* @var Config
*/
protected $config;
/**
* The paths containing the language files.
*
* @var array
*/
protected $paths;
/**
* Create a new language factory instance.
*
* Note: The entire configuration manager is used in case the default language
* is changed during the course of a request to the application.
*
* @param Config $config
* @param array $paths
* @return void
*/
public function __construct(Config $config, $paths)
{
$this->paths = $paths;
$this->config = $config;
}
/**
* Begin retrieving a language line.
*
* <code>
* // Begin retrieving a language line
* $lang = Lang::line('messages.welcome');
*
* // Begin retrieving a language line with replacements
* $lang = Lang::line('validation.required', array('attribute' => 'email'));
*
* // Begin retrieving a language line in a given language
* $lang = Lang::line('messages.welcome', null, 'sp');
* </code>
*
* @param string $key
* @param array $replacements
* @param string $language
* @return Lang
*/
public function line($key, $replacements = array(), $language = null)
{
$language = ( ! is_null($language)) $this->config->get('application.language') : $language;
return new Lang($key, (array) $replacements, $language, $this->paths);
}
}
class Lang { class Lang {
/** /**
...@@ -105,17 +45,28 @@ class Lang { ...@@ -105,17 +45,28 @@ class Lang {
* @param string $key * @param string $key
* @param array $replacements * @param array $replacements
* @param string $language * @param string $language
* @param array $paths
* @return void * @return void
*/ */
public function __construct($key, $replacements, $language, $paths) protected function __construct($key, $replacements = array(), $language = null)
{ {
$this->key = $key; $this->key = $key;
$this->paths = $paths;
$this->language = $language; $this->language = $language;
$this->replacements = $replacements; $this->replacements = $replacements;
} }
/**
* Create a new language line instance.
*
* @param string $key
* @param array $replacements
* @param string $language
* @return Lang
*/
public static function line($key, $replacements = array(), $language = null)
{
return new static($key, $replacements, $language);
}
/** /**
* Get the language line. * Get the language line.
* *
...@@ -191,7 +142,7 @@ class Lang { ...@@ -191,7 +142,7 @@ class Lang {
$language = array(); $language = array();
foreach ($this->paths as $directory) foreach (array(SYS_LANG_PATH, LANG_PATH) as $directory)
{ {
if (file_exists($path = $directory.$this->language.'/'.$file.EXT)) if (file_exists($path = $directory.$this->language.'/'.$file.EXT))
{ {
......
...@@ -8,27 +8,25 @@ require 'core.php'; ...@@ -8,27 +8,25 @@ require 'core.php';
// -------------------------------------------------------------- // --------------------------------------------------------------
// Get an instance of the configuration manager. // Get an instance of the configuration manager.
// -------------------------------------------------------------- // --------------------------------------------------------------
$config = $container->resolve('laravel.config'); set_exception_handler(function($e)
set_exception_handler(function($e) use ($config)
{ {
call_user_func($config->get('error.handler'), $e); call_user_func(Config::get('error.handler'), $e);
}); });
set_error_handler(function($number, $error, $file, $line) use ($config) set_error_handler(function($number, $error, $file, $line)
{ {
$exception = new \ErrorException($error, $number, 0, $file, $line); $exception = new \ErrorException($error, $number, 0, $file, $line);
call_user_func($config->get('error.handler'), $exception); call_user_func(Config::get('error.handler'), $exception);
}); });
register_shutdown_function(function() use ($config) register_shutdown_function(function()
{ {
if ( ! is_null($error = error_get_last())) if ( ! is_null($error = error_get_last()))
{ {
$exception = new \ErrorException($error['message'], $error['type'], 0, $error['file'], $error['line']); $exception = new \ErrorException($error['message'], $error['type'], 0, $error['file'], $error['line']);
call_user_func($config->get('error.handler'), $exception); call_user_func(Config::get('error.handler'), $exception);
} }
}); });
...@@ -42,22 +40,22 @@ ini_set('display_errors', 'Off'); ...@@ -42,22 +40,22 @@ ini_set('display_errors', 'Off');
// -------------------------------------------------------------- // --------------------------------------------------------------
// Set the default timezone. // Set the default timezone.
// -------------------------------------------------------------- // --------------------------------------------------------------
date_default_timezone_set($config->get('application.timezone')); date_default_timezone_set(Config::get('application.timezone'));
// -------------------------------------------------------------- // --------------------------------------------------------------
// Load the session and session manager. // Load the session and session manager.
// -------------------------------------------------------------- // --------------------------------------------------------------
if ($config->get('session.driver') !== '') if (Config::get('session.driver') !== '')
{ {
$session = $container->resolve('laravel.session.manager'); $session = $container->resolve('laravel.session.manager');
$container->instance('laravel.session', $session->payload($config->get('session'))); $container->instance('laravel.session', $session->payload(Config::get('session')));
} }
// -------------------------------------------------------------- // --------------------------------------------------------------
// Route the request and get the response from the route. // Route the request and get the response from the route.
// -------------------------------------------------------------- // --------------------------------------------------------------
$route = $container->resolve('laravel.routing.router')->route($container->resolve('laravel.request')); $route = $container->resolve('laravel.routing.router')->route(Request::method(), Request::uri());
if ( ! is_null($route)) if ( ! is_null($route))
{ {
...@@ -65,7 +63,7 @@ if ( ! is_null($route)) ...@@ -65,7 +63,7 @@ if ( ! is_null($route))
} }
else else
{ {
$response = $container->resolve('laravel.response')->error('404'); $response = Response::error('404');
} }
// -------------------------------------------------------------- // --------------------------------------------------------------
...@@ -78,13 +76,13 @@ $response->content = $response->render(); ...@@ -78,13 +76,13 @@ $response->content = $response->render();
// -------------------------------------------------------------- // --------------------------------------------------------------
if (isset($session)) if (isset($session))
{ {
$session->close($container->resolve('laravel.session'), $config->get('session')); $session->close($container->resolve('laravel.session'), Config::get('session'));
} }
// -------------------------------------------------------------- // --------------------------------------------------------------
// Send the queued cookies to the browser. // Send the queued cookies to the browser.
// -------------------------------------------------------------- // --------------------------------------------------------------
$container->resolve('laravel.cookie')->send(); Cookie::send();
// -------------------------------------------------------------- // --------------------------------------------------------------
// Send the response to the browser. // Send the response to the browser.
......
...@@ -7,27 +7,14 @@ class Loader { ...@@ -7,27 +7,14 @@ class Loader {
* *
* @var array * @var array
*/ */
protected $paths; public static $paths = array();
/** /**
* The class aliases defined for the application. * The class aliases defined for the application.
* *
* @var array * @var array
*/ */
protected $aliases; public static $aliases = array();
/**
* Create a new class loader instance.
*
* @param array $paths
* @param array $aliases
* @return void
*/
public function __construct($paths, $aliases)
{
$this->paths = $paths;
$this->aliases = $aliases;
}
/** /**
* Load the file for a given class. * Load the file for a given class.
...@@ -35,7 +22,7 @@ class Loader { ...@@ -35,7 +22,7 @@ class Loader {
* @param string $class * @param string $class
* @return void * @return void
*/ */
public function load($class) public static function load($class)
{ {
// All Laravel core classes follow a namespace to directory convention. So, we will // All Laravel core classes follow a namespace to directory convention. So, we will
// replace all of the namespace slashes with directory slashes. // replace all of the namespace slashes with directory slashes.
...@@ -43,9 +30,9 @@ class Loader { ...@@ -43,9 +30,9 @@ class Loader {
// First, we'll check to determine if an alias exists. If it does, we will define the // 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. // alias and bail out. Aliases are defined for most developer used core classes.
if (array_key_exists($class, $this->aliases)) return class_alias($this->aliases[$class], $class); if (array_key_exists($class, static::$aliases)) return class_alias(static::$aliases[$class], $class);
foreach ($this->paths as $path) foreach (static::$paths as $path)
{ {
if (file_exists($path = $path.$file.EXT)) if (file_exists($path = $path.$file.EXT))
{ {
...@@ -70,9 +57,9 @@ class Loader { ...@@ -70,9 +57,9 @@ class Loader {
* @param string $class * @param string $class
* @return void * @return void
*/ */
public function alias($alias, $class) public static function alias($alias, $class)
{ {
$this->aliases[$alias] = $class; static::$aliases[$alias] = $class;
} }
/** /**
...@@ -88,9 +75,9 @@ class Loader { ...@@ -88,9 +75,9 @@ class Loader {
* @param string $path * @param string $path
* @return void * @return void
*/ */
public function path($path) public static function path($path)
{ {
$this->paths[] = rtrim($path, '/').'/'; static::$paths[] = rtrim($path, '/').'/';
} }
/** /**
...@@ -104,9 +91,9 @@ class Loader { ...@@ -104,9 +91,9 @@ class Loader {
* @param string $alias * @param string $alias
* @return void * @return void
*/ */
public function forget_alias($alias) public static function forget_alias($alias)
{ {
unset($this->aliases[$alias]); unset(static::$aliases[$alias]);
} }
} }
\ No newline at end of file
<?php namespace Laravel;
class Paginator_Factory {
protected $request;
protected $html;
protected $lang;
public function __construct(Request $request, HTML $html, Lang_Factory $lang)
{
$this->html = $html;
$this->lang = $lang;
$this->request = $request;
}
public function make($results, $total, $per_page)
{
$page = Paginator::page($total, $per_page);
$last_page = ceil($total / $per_page);
return new Paginator($this->request, $this->html, $this->lang, $results, $page, $total, $per_page, $last_page);
}
}
class Paginator {
/**
* The results for the current page.
*
* @var array
*/
public $results;
/**
* The total number of results.
*
* @var int
*/
public $total;
/**
* The current page.
*
* @var int
*/
public $page;
/**
* The number of items per page.
*
* @var int
*/
public $per_page;
/**
* The last page available for the result set.
*
* @var int
*/
public $last_page;
/**
* The language that should be used when generating page links.
*
* @var string
*/
public $language;
/**
* The values that should be appended to the end of the link query strings.
*
* @var array
*/
public $append = array();
/**
* Create a new Paginator instance.
*
* @param array $results
* @param int $page
* @param int $total
* @param int $per_page
* @param int $last_page
* @return void
*/
protected function __construct(Request $request, HTML $html, Lang_Factory $lang, $results, $page, $total, $per_page, $last_page)
{
$this->html = $html;
$this->lang = $lang;
$this->page = $page;
$this->total = $total;
$this->request = $request;
$this->results = $results;
$this->per_page = $per_page;
$this->last_page = $last_page;
}
/**
* Create a new Paginator instance.
*
* @param array $results
* @param int $total
* @param int $per_page
* @return Paginator
*/
public static function make($results, $total, $per_page)
{
return new static($results, static::page($total, $per_page), $total, $per_page, ceil($total / $per_page));
}
/**
* Get the current page from the request query string.
*
* The page will be validated and adjusted if it is less than one or greater than the last page.
* For example, if the current page is not an integer or less than one, one will be returned.
* If the current page is greater than the last page, the last page will be returned.
*
* @param int $total
* @param int $per_page
* @return int
*/
public static function page($total, $per_page)
{
$page = IoC::container()->resolve('laravel.input')->get('page', 1);
if (is_numeric($page) and $page > $last_page = ceil($total / $per_page))
{
return ($last_page > 0) ? $last_page : 1;
}
return ($page < 1 or filter_var($page, FILTER_VALIDATE_INT) === false) ? 1 : $page;
}
/**
* Create the HTML pagination links.
*
* @param int $adjacent
* @return string
*/
public function links($adjacent = 3)
{
if ($this->last_page <= 1) return '';
// The hard-coded "7" is to account for all of the constant elements in a sliding range.
// Namely: The the current page, the two ellipses, the two beginning pages, and the two ending pages.
if ($this->last_page < 7 + ($adjacent * 2))
{
$numbers = $this->range(1, $this->last_page);
}
else
{
$numbers = $this->slider($adjacent);
}
return '<div class="pagination">'.$this->previous().$numbers.$this->next().'</div>';
}
/**
* Build sliding list of HTML numeric page links.
*
* @param int $adjacent
* @return string
*/
private function slider($adjacent)
{
if ($this->page <= $adjacent * 2)
{
return $this->range(1, 2 + ($adjacent * 2)).$this->ending();
}
elseif ($this->page >= $this->last_page - ($adjacent * 2))
{
return $this->beginning().$this->range($this->last_page - 2 - ($adjacent * 2), $this->last_page);
}
else
{
return $this->beginning().$this->range($this->page - $adjacent, $this->page + $adjacent).$this->ending();
}
}
/**
* Generate the "previous" HTML link.
*
* @return string
*/
public function previous()
{
$text = Lang::line('pagination.previous')->get($this->language);
if ($this->page > 1)
{
return $this->link($this->page - 1, $text, 'prev_page').' ';
}
return HTML::span($text, array('class' => 'disabled prev_page')).' ';
}
/**
* Generate the "next" HTML link.
*
* @return string
*/
public function next()
{
$text = Lang::line('pagination.next')->get($this->language);
if ($this->page < $this->last_page)
{
return $this->link($this->page + 1, $text, 'next_page');
}
return HTML::span($text, array('class' => 'disabled next_page'));
}
/**
* Build the first two page links for a sliding page range.
*
* @return string
*/
private function beginning()
{
return $this->range(1, 2).'<span class="dots">...</span>';
}
/**
* Build the last two page links for a sliding page range.
*
* @return string
*/
private function ending()
{
return '<span class="dots">...</span>'.$this->range($this->last_page - 1, $this->last_page);
}
/**
* Build a range of page links.
*
* For the current page, an HTML span element will be generated instead of a link.
*
* @param int $start
* @param int $end
* @return string
*/
private function range($start, $end)
{
$pages = '';
for ($i = $start; $i <= $end; $i++)
{
$pages .= ($this->page == $i) ? HTML::span($i, array('class' => 'current')).' ' : $this->link($i, $i, null).' ';
}
return $pages;
}
/**
* Create a HTML page link.
*
* @param int $page
* @param string $text
* @param string $attributes
* @return string
*/
private function link($page, $text, $class)
{
$append = '';
foreach ($this->append as $key => $value)
{
$append .= '&'.$key.'='.$value;
}
return HTML::link(Request::uri().'?page='.$page.$append, $text, compact('class'), Request::is_secure());
}
/**
* Set the language that should be used when generating page links.
*
* @param string $language
* @return Paginator
*/
public function lang($language)
{
$this->language = $language;
return $this;
}
/**
* Set the items that should be appended to the link query strings.
*
* @param array $values
* @return Paginator
*/
public function append($values)
{
$this->append = $values;
return $this;
}
}
\ No newline at end of file
...@@ -2,24 +2,6 @@ ...@@ -2,24 +2,6 @@
class Redirect extends Response { class Redirect extends Response {
/**
* The URL generator instance.
*
* @var URL
*/
private $url;
/**
* Create a new redirect generator instance.
*
* @param URL $url
* @return void
*/
public function __construct(URL $url)
{
$this->url = $url;
}
/** /**
* Create a redirect response. * Create a redirect response.
* *
...@@ -36,11 +18,11 @@ class Redirect extends Response { ...@@ -36,11 +18,11 @@ class Redirect extends Response {
* @param bool $https * @param bool $https
* @return Redirect * @return Redirect
*/ */
public function to($url, $status = 302, $https = false) public static function to($url, $status = 302, $https = false)
{ {
parent::__construct('', $status); $response = new static('', $status);
return $this->header('Location', $this->url->to($url, $https)); return $response->header('Location', URL::to($url, $https));
} }
/** /**
...@@ -55,9 +37,9 @@ class Redirect extends Response { ...@@ -55,9 +37,9 @@ class Redirect extends Response {
* @param int $status * @param int $status
* @return Response * @return Response
*/ */
public function to_secure($url, $status = 302) public static function to_secure($url, $status = 302)
{ {
return $this->to($url, $status, true); return static::to($url, $status, true);
} }
/** /**
...@@ -76,7 +58,7 @@ class Redirect extends Response { ...@@ -76,7 +58,7 @@ class Redirect extends Response {
*/ */
public function with($key, $value) public function with($key, $value)
{ {
if (IoC::container()->resolve('laravel.config')->get('session.driver') == '') if (Config::get('session.driver') == '')
{ {
throw new \Exception('A session driver must be set before setting flash data.'); throw new \Exception('A session driver must be set before setting flash data.');
} }
...@@ -100,18 +82,18 @@ class Redirect extends Response { ...@@ -100,18 +82,18 @@ class Redirect extends Response {
* return Redirect::to_secure_profile(); * return Redirect::to_secure_profile();
* </code> * </code>
*/ */
public function __call($method, $parameters) public static function __callStatic($method, $parameters)
{ {
$parameters = (isset($parameters[0])) ? $parameters[0] : array(); $parameters = (isset($parameters[0])) ? $parameters[0] : array();
if (strpos($method, 'to_secure_') === 0) if (strpos($method, 'to_secure_') === 0)
{ {
return $this->to($this->url->to_route(substr($method, 10), $parameters, true)); return static::to(URL::to_route(substr($method, 10), $parameters, true));
} }
if (strpos($method, 'to_') === 0) if (strpos($method, 'to_') === 0)
{ {
return $this->to($this->url->to_route(substr($method, 3), $parameters)); return static::to(URL::to_route(substr($method, 3), $parameters));
} }
throw new \Exception("Method [$method] is not defined on the Redirect class."); throw new \Exception("Method [$method] is not defined on the Redirect class.");
......
...@@ -2,33 +2,12 @@ ...@@ -2,33 +2,12 @@
class Request { class Request {
/**
* The URI for the current request.
*
* @var string
*/
protected $uri;
/**
* The $_SERVER array for the request.
*
* @var array
*/
protected $server;
/**
* The $_POST array for the request.
*
* @var array
*/
protected $post;
/** /**
* The route handling the current request. * The route handling the current request.
* *
* @var Routing\Route * @var Routing\Route
*/ */
public $route; public static $route;
/** /**
* The request data key that is used to indicate the spoofed request method. * The request data key that is used to indicate the spoofed request method.
...@@ -38,35 +17,15 @@ class Request { ...@@ -38,35 +17,15 @@ class Request {
const spoofer = '__spoofer'; const spoofer = '__spoofer';
/** /**
* Create a new request instance. * Get the URI for the current request.
*
* @param string $uri
* @param array $server
* @param array $post
* @return void
*/
public function __construct($uri, $server, $post)
{
$this->uri = $uri;
$this->post = $post;
$this->server = $server;
}
/**
* Determine the request URI.
*
* The request URI will be trimmed to remove to the application URL and application index file.
* If the request is to the root of the application, the URI will be set to a forward slash.
* *
* If the $_SERVER "PATH_INFO" variable is available, it will be used; otherwise, we will try * Note: This method is the equivalent of calling the URI::get method.
* to determine the URI using the REQUEST_URI variable. If neither are available, an exception
* will be thrown by the method.
* *
* @return string * @return string
*/ */
public function uri() public static function uri()
{ {
return $this->uri; return URI::get();
} }
/** /**
...@@ -84,9 +43,9 @@ class Request { ...@@ -84,9 +43,9 @@ class Request {
* *
* @return string * @return string
*/ */
public function format() public static function format()
{ {
return (($extension = pathinfo($this->uri(), PATHINFO_EXTENSION)) !== '') ? $extension : 'html'; return (($extension = pathinfo(URI::get(), PATHINFO_EXTENSION)) !== '') ? $extension : 'html';
} }
/** /**
...@@ -98,9 +57,9 @@ class Request { ...@@ -98,9 +57,9 @@ class Request {
* *
* @return string * @return string
*/ */
public function method() public static function method()
{ {
return ($this->spoofed()) ? $this->post[Request::spoofer] : $this->server['REQUEST_METHOD']; return (static::spoofed()) ? $_POST[Request::spoofer] : $_SERVER['REQUEST_METHOD'];
} }
/** /**
...@@ -120,9 +79,9 @@ class Request { ...@@ -120,9 +79,9 @@ class Request {
* @param mixed $default * @param mixed $default
* @return string * @return string
*/ */
public function server($key = null, $default = null) public static function server($key = null, $default = null)
{ {
return Arr::get($this->server, strtoupper($key), $default); return Arr::get($_SERVER, strtoupper($key), $default);
} }
/** /**
...@@ -134,9 +93,9 @@ class Request { ...@@ -134,9 +93,9 @@ class Request {
* *
* @return bool * @return bool
*/ */
public function spoofed() public static function spoofed()
{ {
return is_array($this->post) and array_key_exists(Request::spoofer, $this->post); return is_array($_POST) and array_key_exists(Request::spoofer, $_POST);
} }
/** /**
...@@ -155,19 +114,19 @@ class Request { ...@@ -155,19 +114,19 @@ class Request {
* @param mixed $default * @param mixed $default
* @return string * @return string
*/ */
public function ip($default = '0.0.0.0') public static function ip($default = '0.0.0.0')
{ {
if (isset($this->server['HTTP_X_FORWARDED_FOR'])) if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{ {
return $this->server['HTTP_X_FORWARDED_FOR']; return $_SERVER['HTTP_X_FORWARDED_FOR'];
} }
elseif (isset($this->server['HTTP_CLIENT_IP'])) elseif (isset($_SERVER['HTTP_CLIENT_IP']))
{ {
return $this->server['HTTP_CLIENT_IP']; return $_SERVER['HTTP_CLIENT_IP'];
} }
elseif (isset($this->server['REMOTE_ADDR'])) elseif (isset($_SERVER['REMOTE_ADDR']))
{ {
return $this->server['REMOTE_ADDR']; return $_SERVER['REMOTE_ADDR'];
} }
return ($default instanceof \Closure) ? call_user_func($default) : $default; return ($default instanceof \Closure) ? call_user_func($default) : $default;
...@@ -181,9 +140,9 @@ class Request { ...@@ -181,9 +140,9 @@ class Request {
* *
* @return string * @return string
*/ */
public function protocol() public static function protocol()
{ {
return (isset($this->server['HTTPS']) and $this->server['HTTPS'] !== 'off') ? 'https' : 'http'; return (isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
} }
/** /**
...@@ -191,9 +150,9 @@ class Request { ...@@ -191,9 +150,9 @@ class Request {
* *
* @return bool * @return bool
*/ */
public function secure() public static function secure()
{ {
return $this->protocol() == 'https'; return static::protocol() == 'https';
} }
/** /**
...@@ -201,11 +160,11 @@ class Request { ...@@ -201,11 +160,11 @@ class Request {
* *
* @return bool * @return bool
*/ */
public function ajax() public static function ajax()
{ {
if ( ! isset($this->server['HTTP_X_REQUESTED_WITH'])) return false; if ( ! isset($_SERVER['HTTP_X_REQUESTED_WITH'])) return false;
return strtolower($this->server['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; return strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
} }
/** /**
...@@ -213,6 +172,6 @@ class Request { ...@@ -213,6 +172,6 @@ class Request {
* *
* @return Route * @return Route
*/ */
public function route() { return $this->route; } public function route() { return static::$route; }
} }
\ No newline at end of file
<?php namespace Laravel; <?php namespace Laravel;
class Response_Factory { class Response {
/** /**
* The view factory instance. * The content of the response.
* *
* @var View_Factory * @var mixed
*/ */
protected $view; public $content;
/** /**
* The file manager instance. * The HTTP status code of the response.
* *
* @var File * @var int
*/
public $status;
/**
* The response headers.
*
* @var array
*/ */
protected $file; public $headers = array();
/** /**
* Create a new response factory instance. * HTTP status codes.
* *
* @param View_Factory $view * @var array
* @param File $file */
private $statuses = array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
422 => 'Unprocessable Entity',
423 => 'Locked',
424 => 'Failed Dependency',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
507 => 'Insufficient Storage',
509 => 'Bandwidth Limit Exceeded'
);
/**
* Create a new response instance.
*
* @param mixed $content
* @param int $status
* @param array $headers
* @return void * @return void
*/ */
public function __construct(View_Factory $view, File $file) public function __construct($content, $status = 200, $headers = array())
{ {
$this->view = $view; $this->status = $status;
$this->file = $file; $this->content = $content;
$this->headers = $headers;
} }
/** /**
...@@ -45,9 +108,9 @@ class Response_Factory { ...@@ -45,9 +108,9 @@ class Response_Factory {
* @param array $headers * @param array $headers
* @return Response * @return Response
*/ */
public function make($content, $status = 200, $headers = array()) public static function make($content, $status = 200, $headers = array())
{ {
return new Response($content, $status, $headers); return new static($content, $status, $headers);
} }
/** /**
...@@ -65,9 +128,9 @@ class Response_Factory { ...@@ -65,9 +128,9 @@ class Response_Factory {
* @param array $data * @param array $data
* @return Response * @return Response
*/ */
public function view($view, $data = array()) public static function view($view, $data = array())
{ {
return new Response($this->view->make($view, $data)); return new static(View::make($view, $data));
} }
/** /**
...@@ -85,9 +148,9 @@ class Response_Factory { ...@@ -85,9 +148,9 @@ class Response_Factory {
* @param array $data * @param array $data
* @return Response * @return Response
*/ */
public function with($name, $data = array()) public static function with($name, $data = array())
{ {
return new Response($this->view->of($name, $data)); return new static(View::of($name, $data));
} }
/** /**
...@@ -106,9 +169,9 @@ class Response_Factory { ...@@ -106,9 +169,9 @@ class Response_Factory {
* @param array $data * @param array $data
* @return Response * @return Response
*/ */
public function error($code, $data = array()) public static function error($code, $data = array())
{ {
return new Response($this->view->make('error/'.$code, $data), $code); return new static(View::make('error/'.$code, $data), $code);
} }
/** /**
...@@ -119,137 +182,24 @@ class Response_Factory { ...@@ -119,137 +182,24 @@ class Response_Factory {
* @param array $headers * @param array $headers
* @return Response * @return Response
*/ */
public function download($path, $name = null, $headers = array()) public static function download($path, $name = null, $headers = array())
{ {
if (is_null($name)) $name = basename($path); if (is_null($name)) $name = basename($path);
$headers = array_merge(array( $headers = array_merge(array(
'Content-Description' => 'File Transfer', 'Content-Description' => 'File Transfer',
'Content-Type' => $this->file->mime($this->file->extension($path)), 'Content-Type' => File::mime(File::extension($path)),
'Content-Disposition' => 'attachment; filename="'.$name.'"', 'Content-Disposition' => 'attachment; filename="'.$name.'"',
'Content-Transfer-Encoding' => 'binary', 'Content-Transfer-Encoding' => 'binary',
'Expires' => 0, 'Expires' => 0,
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0', 'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Pragma' => 'public', 'Pragma' => 'public',
'Content-Length' => $this->file-size($path), 'Content-Length' => File::size($path),
), $headers); ), $headers);
return new Response($this->file->get($path), 200, $headers); return new static(File::get($path), 200, $headers);
} }
/**
* Magic Method for handling the dynamic creation of Responses containing named views.
*
* <code>
* // Create a Response instance with the "layout" named view
* $response = Response::with_layout();
*
* // Create a Response instance with the "layout" named view and bound data
* $response = Response::with_layout(array('name' => 'Fred'));
* </code>
*/
public function __call($method, $parameters)
{
if (strpos($method, 'with_') === 0)
{
return $this->with(substr($method, 5), Arr::get($parameters, 0, array()));
}
}
}
class Response {
/**
* The content of the response.
*
* @var mixed
*/
public $content;
/**
* The HTTP status code of the response.
*
* @var int
*/
public $status;
/**
* The response headers.
*
* @var array
*/
public $headers = array();
/**
* HTTP status codes.
*
* @var array
*/
private $statuses = array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
422 => 'Unprocessable Entity',
423 => 'Locked',
424 => 'Failed Dependency',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
507 => 'Insufficient Storage',
509 => 'Bandwidth Limit Exceeded'
);
/**
* Create a new response instance.
*
* @param mixed $content
* @param int $status
* @param array $headers
* @return void
*/
public function __construct($content, $status = 200, $headers = array())
{
$this->content = $content;
$this->headers = $headers;
$this->status = $status;
}
/** /**
* Get the evaluated string contents of the response. * Get the evaluated string contents of the response.
* *
...@@ -320,4 +270,23 @@ class Response { ...@@ -320,4 +270,23 @@ class Response {
return $this; return $this;
} }
/**
* Magic Method for handling the dynamic creation of Responses containing named views.
*
* <code>
* // Create a Response instance with the "layout" named view
* $response = Response::with_layout();
*
* // Create a Response instance with the "layout" named view and bound data
* $response = Response::with_layout(array('name' => 'Fred'));
* </code>
*/
public static function __callStatic($method, $parameters)
{
if (strpos($method, 'with_') === 0)
{
return static::with(substr($method, 5), Arr::get($parameters, 0, array()));
}
}
} }
\ No newline at end of file
...@@ -69,22 +69,23 @@ class Router { ...@@ -69,22 +69,23 @@ class Router {
* *
* If no route can be found, the application controllers will be searched. * If no route can be found, the application controllers will be searched.
* *
* @param Request $request * @param string $method
* @param string $uri
* @return Route * @return Route
*/ */
public function route(Request $request) public function route($method, $uri)
{ {
$routes = $this->loader->load($request->uri()); $routes = $this->loader->load($uri);
// Put the request method and URI in route form. Routes begin with // Put the request method and URI in route form. Routes begin with
// the request method and a forward slash. // the request method and a forward slash.
$destination = $request->method().' /'.trim($request->uri(), '/'); $destination = $method.' /'.trim($uri, '/');
// Check for a literal route match first. If we find one, there is // Check for a literal route match first. If we find one, there is
// no need to spin through all of the routes. // no need to spin through all of the routes.
if (isset($routes[$destination])) if (isset($routes[$destination]))
{ {
return $request->route = new Route($destination, $routes[$destination], array()); return Request::$route = new Route($destination, $routes[$destination], array());
} }
foreach ($routes as $keys => $callback) foreach ($routes as $keys => $callback)
...@@ -100,13 +101,13 @@ class Router { ...@@ -100,13 +101,13 @@ class Router {
if (preg_match('#^'.$this->translate_wildcards($key).'$#', $destination)) if (preg_match('#^'.$this->translate_wildcards($key).'$#', $destination))
{ {
return $request->route = new Route($keys, $callback, $this->parameters($destination, $key)); return Request::$route = new Route($keys, $callback, $this->parameters($destination, $key));
} }
} }
} }
} }
return $request->route = $this->route_to_controller($request, $destination); return Request::$route = $this->route_to_controller($method, $uri, $destination);
} }
/** /**
...@@ -114,17 +115,18 @@ class Router { ...@@ -114,17 +115,18 @@ class Router {
* *
* If no corresponding controller can be found, NULL will be returned. * If no corresponding controller can be found, NULL will be returned.
* *
* @param Request $request * @param string $method
* @param string $destination * @param string $uri
* @param string $destination
* @return Route * @return Route
*/ */
protected function route_to_controller(Request $request, $destination) protected function route_to_controller($method, $uri, $destination)
{ {
// If the request is to the root of the application, an ad-hoc route will be generated // If the request is to the root of the application, an ad-hoc route will be generated
// to the home controller's "index" method, making it the default controller method. // to the home controller's "index" method, making it the default controller method.
if ($request->uri() === '/') return new Route($request->method().' /', 'home@index'); if ($uri === '/') return new Route($method.' /', 'home@index');
$segments = explode('/', trim($request->uri(), '/')); $segments = explode('/', trim($uri, '/'));
if ( ! is_null($key = $this->controller_key($segments))) if ( ! is_null($key = $this->controller_key($segments)))
{ {
......
<?php namespace Laravel\Security; <?php namespace Laravel\Security;
use Laravel\Config;
use Laravel\Session\Driver; use Laravel\Session\Driver;
class Auth { class Auth {
...@@ -11,13 +12,6 @@ class Auth { ...@@ -11,13 +12,6 @@ class Auth {
*/ */
protected $user; protected $user;
/**
* The configuration manager instance.
*
* @var Config
*/
protected $config;
/** /**
* The session driver instance. * The session driver instance.
* *
...@@ -28,13 +22,11 @@ class Auth { ...@@ -28,13 +22,11 @@ class Auth {
/** /**
* Create a new authenticator instance. * Create a new authenticator instance.
* *
* @param Config $config
* @param Session\Driver $session * @param Session\Driver $session
* @return void * @return void
*/ */
public function __construct(Config $config, Driver $session) public function __construct(Driver $session)
{ {
$this->config = $config;
$this->session = $session; $this->session = $session;
} }
...@@ -59,7 +51,7 @@ class Auth { ...@@ -59,7 +51,7 @@ class Auth {
{ {
if ( ! is_null($this->user)) return $this->user; if ( ! is_null($this->user)) return $this->user;
return $this->user = call_user_func($this->config->get('auth.user'), $this->session->get('laravel_user_id')); return $this->user = call_user_func(Config::get('auth.user'), $this->session->get('laravel_user_id'));
} }
/** /**
...@@ -74,7 +66,7 @@ class Auth { ...@@ -74,7 +66,7 @@ class Auth {
*/ */
public function attempt($username, $password = null) public function attempt($username, $password = null)
{ {
if ( ! is_null($user = call_user_func($this->config->get('auth.attempt'), $username, $password))) if ( ! is_null($user = call_user_func(Config::get('auth.attempt'), $username, $password)))
{ {
$this->remember($user); $this->remember($user);
...@@ -106,7 +98,7 @@ class Auth { ...@@ -106,7 +98,7 @@ class Auth {
*/ */
public function logout() public function logout()
{ {
call_user_func($this->config->get('auth.logout'), $this->user()->id); call_user_func(Config::get('auth.logout'), $this->user()->id);
$this->user = null; $this->user = null;
......
<?php namespace Laravel\Session\Drivers; <?php namespace Laravel\Session\Drivers;
use Laravel\Config;
use Laravel\Database\Connection; use Laravel\Database\Connection;
class Database implements Driver, Sweeper { class Database implements Driver, Sweeper {
...@@ -91,7 +92,7 @@ class Database implements Driver, Sweeper { ...@@ -91,7 +92,7 @@ class Database implements Driver, Sweeper {
*/ */
private function table() private function table()
{ {
return $this->connection->table($this->config->get('session.table')); return $this->connection->table(Config::get('session.table'));
} }
} }
\ No newline at end of file
<?php namespace Laravel\Session\Drivers; <?php namespace Laravel\Session\Drivers;
class File implements Driver, Sweeper { use Laravel\File as F;
/** class File implements Driver, Sweeper {
* The file engine instance.
*
* @var Laravel\File
*/
private $file;
/** /**
* The path to which the session files should be written. * The path to which the session files should be written.
...@@ -19,13 +14,11 @@ class File implements Driver, Sweeper { ...@@ -19,13 +14,11 @@ class File implements Driver, Sweeper {
/** /**
* Create a new File session driver instance. * Create a new File session driver instance.
* *
* @param Laravel\File $file
* @param string $path * @param string $path
* @return void * @return void
*/ */
public function __construct(\Laravel\File $file, $path) public function __construct($path)
{ {
$this->file = $file;
$this->path = $path; $this->path = $path;
} }
...@@ -39,7 +32,7 @@ class File implements Driver, Sweeper { ...@@ -39,7 +32,7 @@ class File implements Driver, Sweeper {
*/ */
public function load($id) public function load($id)
{ {
if ($this->file->exists($path = $this->path.$id)) return unserialize($this->file->get($path)); if (F::exists($path = $this->path.$id)) return unserialize(F::get($path));
} }
/** /**
...@@ -51,7 +44,7 @@ class File implements Driver, Sweeper { ...@@ -51,7 +44,7 @@ class File implements Driver, Sweeper {
*/ */
public function save($session, $config) public function save($session, $config)
{ {
$this->file->put($this->path.$session['id'], serialize($session), LOCK_EX); F::put($this->path.$session['id'], serialize($session), LOCK_EX);
} }
/** /**
...@@ -62,7 +55,7 @@ class File implements Driver, Sweeper { ...@@ -62,7 +55,7 @@ class File implements Driver, Sweeper {
*/ */
public function delete($id) public function delete($id)
{ {
$this->file->delete($this->path.$id); F::delete($this->path.$id);
} }
/** /**
...@@ -75,9 +68,9 @@ class File implements Driver, Sweeper { ...@@ -75,9 +68,9 @@ class File implements Driver, Sweeper {
{ {
foreach (glob($this->path.'*') as $file) foreach (glob($this->path.'*') as $file)
{ {
if ($this->file->type($file) == 'file' and $this->file->modified($file) < $expiration) if (F::type($file) == 'file' and F::modified($file) < $expiration)
{ {
$this->file->delete($file); F::delete($file);
} }
} }
} }
......
<?php namespace Laravel\Session\Transporters; <?php namespace Laravel\Session\Transporters;
class Cookie implements Transporter { use Laravel\Cookie as C;
/** class Cookie implements Transporter {
* Create a new cookie session transporter instance.
*
* @param Cookie $cookie
* @return void
*/
public function __construct(\Laravel\Cookie $cookie)
{
$this->cookie = $cookie;
}
/** /**
* Get the session identifier for the request. * Get the session identifier for the request.
...@@ -21,7 +12,7 @@ class Cookie implements Transporter { ...@@ -21,7 +12,7 @@ class Cookie implements Transporter {
*/ */
public function get($config) public function get($config)
{ {
return $this->cookie->get('laravel_session'); return C::get('laravel_session');
} }
/** /**
...@@ -35,7 +26,7 @@ class Cookie implements Transporter { ...@@ -35,7 +26,7 @@ class Cookie implements Transporter {
{ {
$minutes = ($config['expire_on_close']) ? 0 : $config['lifetime']; $minutes = ($config['expire_on_close']) ? 0 : $config['lifetime'];
$this->cookie->put('laravel_session', $id, $minutes, $config['path'], $config['domain']); C::put('laravel_session', $id, $minutes, $config['path'], $config['domain']);
} }
} }
\ No newline at end of file
...@@ -74,7 +74,7 @@ class Str { ...@@ -74,7 +74,7 @@ class Str {
*/ */
public static function ascii($value) public static function ascii($value)
{ {
$foreign = IoC::container()->resolve('laravel.config')->get('ascii'); $foreign = Config::get('ascii');
$value = preg_replace(array_keys($foreign), array_values($foreign), $value); $value = preg_replace(array_keys($foreign), array_values($foreign), $value);
...@@ -106,7 +106,7 @@ class Str { ...@@ -106,7 +106,7 @@ class Str {
*/ */
protected static function encoding() protected static function encoding()
{ {
return IoC::container()->resolve('laravel.config')->get('application.encoding'); return Config::get('application.encoding');
} }
} }
\ No newline at end of file
...@@ -2,20 +2,6 @@ ...@@ -2,20 +2,6 @@
class URI { class URI {
/**
* The $_SERVER array for the current request.
*
* @var array
*/
protected $server;
/**
* The application URL as specified in the application configuration file.
*
* @var string
*/
protected $url;
/** /**
* The URI for the current request. * The URI for the current request.
* *
...@@ -23,36 +9,30 @@ class URI { ...@@ -23,36 +9,30 @@ class URI {
* *
* @var string * @var string
*/ */
protected $uri; protected static $uri;
/** /**
* Create a new URI instance. * Determine the request URI.
* *
* @param array $server * The request URI will be trimmed to remove to the application URL and application index file.
* @param string $url * If the request is to the root of the application, the URI will be set to a forward slash.
* @return void *
*/ * If the $_SERVER "PATH_INFO" variable is available, it will be used; otherwise, we will try
public function __construct($server, $url) * to determine the URI using the REQUEST_URI variable. If neither are available, an exception
{ * will be thrown by the method.
$this->url = $url;
$this->server = $server;
}
/**
* Get the URI for the current request.
* *
* @return string * @return string
*/ */
public function get() public static function get()
{ {
if ( ! is_null($this->uri)) return $this->uri; if ( ! is_null(static::$uri)) return static::$uri;
if (($uri = $this->from_server()) === false) if (($uri = static::from_server()) === false)
{ {
throw new \Exception('Malformed request URI. Request terminated.'); throw new \Exception('Malformed request URI. Request terminated.');
} }
return $this->uri = $this->format($this->clean($uri)); return static::$uri = static::format(static::clean($uri));
} }
/** /**
...@@ -73,9 +53,9 @@ class URI { ...@@ -73,9 +53,9 @@ class URI {
* @param mixed $default * @param mixed $default
* @return string * @return string
*/ */
public function segment($segment = null, $default = null) public static function segment($segment = null, $default = null)
{ {
$segments = Arr::without(explode('/', $this->detect()), array('')); $segments = Arr::without(explode('/', static::get()), array(''));
if ( ! is_null($segment)) $segment = $segment - 1; if ( ! is_null($segment)) $segment = $segment - 1;
...@@ -87,20 +67,20 @@ class URI { ...@@ -87,20 +67,20 @@ class URI {
* *
* @return string * @return string
*/ */
protected function from_server() protected static function from_server()
{ {
// If the PATH_INFO $_SERVER element is set, we will use since it contains // If the PATH_INFO $_SERVER element is set, we will use since it contains
// the request URI formatted perfectly for Laravel's routing engine. // the request URI formatted perfectly for Laravel's routing engine.
if (isset($this->server['PATH_INFO'])) if (isset($_SERVER['PATH_INFO']))
{ {
return $this->server['PATH_INFO']; return $_SERVER['PATH_INFO'];
} }
// If the REQUEST_URI is set, we need to extract the URL path since this // If the REQUEST_URI is set, we need to extract the URL path since this
// should return the URI formatted in a manner similar to PATH_INFO. // should return the URI formatted in a manner similar to PATH_INFO.
elseif (isset($this->server['REQUEST_URI'])) elseif (isset($_SERVER['REQUEST_URI']))
{ {
return parse_url($this->server['REQUEST_URI'], PHP_URL_PATH); return parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
} }
throw new \Exception('Unable to determine the request URI.'); throw new \Exception('Unable to determine the request URI.');
...@@ -115,9 +95,9 @@ class URI { ...@@ -115,9 +95,9 @@ class URI {
* @param string $uri * @param string $uri
* @return string * @return string
*/ */
protected function clean($uri) protected static function clean($uri)
{ {
foreach (array(parse_url($this->url, PHP_URL_PATH), '/index.php') as $value) foreach (array(parse_url(Config::get('application.url'), PHP_URL_PATH), '/index.php') as $value)
{ {
$uri = (strpos($uri, $value) === 0) ? substr($uri, strlen($value)) : $uri; $uri = (strpos($uri, $value) === 0) ? substr($uri, strlen($value)) : $uri;
} }
...@@ -133,7 +113,7 @@ class URI { ...@@ -133,7 +113,7 @@ class URI {
* @param string $uri * @param string $uri
* @return string * @return string
*/ */
protected function format($uri) protected static function format($uri)
{ {
return (($uri = trim($uri, '/')) == '') ? '/' : $uri; return (($uri = trim($uri, '/')) == '') ? '/' : $uri;
} }
......
...@@ -2,51 +2,6 @@ ...@@ -2,51 +2,6 @@
class URL { class URL {
/**
* The application router instance.
*
* @var Routing\Router
*/
protected $router;
/**
* The base URL of the application.
*
* @var string
*/
protected $base;
/**
* The application index file.
*
* @var string
*/
protected $index;
/**
* Indicates if the current request is using HTTPS.
*
* @var bool
*/
protected $https;
/**
* Create a new URL writer instance.
*
* @param Routing\Router $router
* @param string $base
* @param string $index
* @param bool $https
* @return void
*/
public function __construct(Routing\Router $router, $base, $index, $https)
{
$this->base = $base;
$this->https = $https;
$this->index = $index;
$this->router = $router;
}
/** /**
* Generate an application URL. * Generate an application URL.
* *
...@@ -64,11 +19,11 @@ class URL { ...@@ -64,11 +19,11 @@ class URL {
* @param bool $https * @param bool $https
* @return string * @return string
*/ */
public function to($url = '', $https = false) public static function to($url = '', $https = false)
{ {
if (filter_var($url, FILTER_VALIDATE_URL) !== false) return $url; if (filter_var($url, FILTER_VALIDATE_URL) !== false) return $url;
$base = $this->base.'/'.$this->index; $base = Config::get('application.url').'/'.Config::get('application.index');
if ($https) $base = preg_replace('~http://~', 'https://', $base, 1); if ($https) $base = preg_replace('~http://~', 'https://', $base, 1);
...@@ -86,9 +41,9 @@ class URL { ...@@ -86,9 +41,9 @@ class URL {
* @param string $url * @param string $url
* @return string * @return string
*/ */
public function to_secure($url = '') public static function to_secure($url = '')
{ {
return $this->to($url, true); return static::to($url, true);
} }
/** /**
...@@ -109,11 +64,11 @@ class URL { ...@@ -109,11 +64,11 @@ class URL {
* @param bool $https * @param bool $https
* @return string * @return string
*/ */
public function to_asset($url, $https = null) public static function to_asset($url, $https = null)
{ {
if (is_null($https)) $https = $this->https; if (is_null($https)) $https = Request::secure();
return str_replace('index.php/', '', $this->to($url, $https)); return str_replace('index.php/', '', static::to($url, $https));
} }
/** /**
...@@ -133,14 +88,14 @@ class URL { ...@@ -133,14 +88,14 @@ class URL {
* echo URL::to_route('profile', array($username)); * echo URL::to_route('profile', array($username));
* </code> * </code>
* *
* @param string $name * @param string $name
* @param array $parameters * @param array $parameters
* @param bool $https * @param bool $https
* @return string * @return string
*/ */
public function to_route($name, $parameters = array(), $https = false) public static function to_route($name, $parameters = array(), $https = false)
{ {
if ( ! is_null($route = $this->router->find($name))) if ( ! is_null($route = IoC::container()->resolve('laravel.routing.router')->find($name)))
{ {
$uris = explode(', ', key($route)); $uris = explode(', ', key($route));
...@@ -155,7 +110,7 @@ class URL { ...@@ -155,7 +110,7 @@ class URL {
// Before generating the route URL, we will replace all remaining optional // Before generating the route URL, we will replace all remaining optional
// wildcard segments that were not replaced by parameters with spaces. // wildcard segments that were not replaced by parameters with spaces.
return $this->to(str_replace(array('/(:any?)', '/(:num?)'), '', $uri), $https); return static::to(str_replace(array('/(:any?)', '/(:num?)'), '', $uri), $https);
} }
throw new \Exception("Error generating named route for route [$name]. Route is not defined."); throw new \Exception("Error generating named route for route [$name]. Route is not defined.");
...@@ -176,9 +131,9 @@ class URL { ...@@ -176,9 +131,9 @@ class URL {
* @param array $parameters * @param array $parameters
* @return string * @return string
*/ */
public function to_secure_route($name, $parameters = array()) public static function to_secure_route($name, $parameters = array())
{ {
return $this->to_route($name, $parameters, true); return static::to_route($name, $parameters, true);
} }
/** /**
...@@ -188,7 +143,7 @@ class URL { ...@@ -188,7 +143,7 @@ class URL {
* @param string $separator * @param string $separator
* @return string * @return string
*/ */
public function slug($title, $separator = '-') public static function slug($title, $separator = '-')
{ {
$title = Str::ascii($title); $title = Str::ascii($title);
...@@ -215,18 +170,18 @@ class URL { ...@@ -215,18 +170,18 @@ class URL {
* echo URL::to_secure_profile(); * echo URL::to_secure_profile();
* </code> * </code>
*/ */
public function __call($method, $parameters) public static function __callStatic($method, $parameters)
{ {
$parameters = (isset($parameters[0])) ? $parameters[0] : array(); $parameters = (isset($parameters[0])) ? $parameters[0] : array();
if (strpos($method, 'to_secure_') === 0) if (strpos($method, 'to_secure_') === 0)
{ {
return $this->to_route(substr($method, 10), $parameters, true); return static::to_route(substr($method, 10), $parameters, true);
} }
if (strpos($method, 'to_') === 0) if (strpos($method, 'to_') === 0)
{ {
return $this->to_route(substr($method, 3), $parameters); return static::to_route(substr($method, 3), $parameters);
} }
throw new \Exception("Method [$method] is not defined on the URL class."); throw new \Exception("Method [$method] is not defined on the URL class.");
......
...@@ -3,74 +3,10 @@ ...@@ -3,74 +3,10 @@
use Closure; use Closure;
use Laravel\IoC; use Laravel\IoC;
use Laravel\Str; use Laravel\Str;
use Laravel\Lang_Factory; use Laravel\Lang;
class Validator_Factory {
/**
* The language factory instance.
*
* @var Lang_Factory
*/
protected $lang;
/**
* The registered custom validators.
*
* @var array
*/
protected $validators = array();
/**
* Create a new validator factory instance.
*
* @param Lang_Factory $lang
* @return void
*/
public function __construct(Lang_Factory $lang)
{
$this->lang = $lang;
}
/**
* Create a new validator instance.
*
* @param array $attributes
* @param array $rules
* @param array $messages
* @return Validator
*/
public function make($attributes, $rules, $messages = array())
{
return new Validator($this->lang, $this->validators, $attributes, $rules, $messages);
}
/**
* Register a custom validation callback.
*
* @param string $name
* @param string $message
* @param Closure $closure
* @return Validator
*/
public function register($name, $message, Closure $closure)
{
$this->validators[$name] = compact('message', 'closure');
return $this;
}
}
class Validator { class Validator {
/**
* The registered custom validators.
*
* @var array
*/
protected $validators = array();
/** /**
* The validation rules. * The validation rules.
* *
...@@ -130,36 +66,36 @@ class Validator { ...@@ -130,36 +66,36 @@ class Validator {
/** /**
* Create a new validator instance. * Create a new validator instance.
* *
* @param Lang_Factory $lang * @param array $attributes
* @param array $validators * @param array $rules
* @param array $attributes * @param array $messages
* @param array $rules
* @param array $messages
* @return void * @return void
*/ */
public function __construct(Lang_Factory $lang, $validators, $attributes, $rules, $messages = array()) public function __construct($attributes, $rules, $messages = array())
{ {
foreach ($rules as $key => &$rule) foreach ($rules as $key => &$rule)
{ {
$rule = (is_string($rule)) ? explode('|', $rule) : $rule; $rule = (is_string($rule)) ? explode('|', $rule) : $rule;
} }
// Register all of the custom validators and their corresponding error messages.
// The validators are executed via the magic __call method. The validator names
// are prefixed with "validate_" to match the built-in validators.
foreach ($validators as $key => $value)
{
$this->messages[$key] = $value['message'];
$this->validators['validate_'.$key] = $value['closure'];
}
$this->lang = $lang;
$this->rules = $rules; $this->rules = $rules;
$this->attributes = $attributes; $this->attributes = $attributes;
$this->messages = array_merge($this->messages, $messages); $this->messages = array_merge($this->messages, $messages);
} }
/**
* Create a new validator instance.
*
* @param array $attributes
* @param array $rules
* @param array $messages
* @return Validator
*/
public static function make($attributes, $rules, $messages = array())
{
return new static($attributes, $rules, $messages);
}
/** /**
* Validate the target array using the specified validation rules. * Validate the target array using the specified validation rules.
* *
...@@ -201,7 +137,7 @@ class Validator { ...@@ -201,7 +137,7 @@ class Validator {
{ {
list($rule, $parameters) = $this->parse($rule); list($rule, $parameters) = $this->parse($rule);
if ( ! method_exists($this, $validator = 'validate_'.$rule) and ! isset($this->validators[$validator])) if ( ! method_exists($this, $validator = 'validate_'.$rule))
{ {
throw new \Exception("Validation rule [$rule] doesn't exist."); throw new \Exception("Validation rule [$rule] doesn't exist.");
} }
...@@ -516,15 +452,15 @@ class Validator { ...@@ -516,15 +452,15 @@ class Validator {
} }
else else
{ {
$message = $this->lang->line('validation.'.$rule)->get($this->language); $message = Lang::line('validation.'.$rule)->get($this->language);
// For "size" rules that are validating strings or files, we need to adjust // For "size" rules that are validating strings or files, we need to adjust
// the default error message for the appropriate units. // the default error message for the appropriate units.
if (in_array($rule, $this->size_rules) and ! $this->has_rule($attribute, $this->numeric_rules)) if (in_array($rule, $this->size_rules) and ! $this->has_rule($attribute, $this->numeric_rules))
{ {
return (array_key_exists($attribute, IoC::container()->resolve('laravel.input')->files())) return (array_key_exists($attribute, IoC::container()->resolve('laravel.input')->files()))
? rtrim($message, '.').' '.$this->lang->line('validation.kilobytes')->get($this->language).'.' ? rtrim($message, '.').' '.Lang::line('validation.kilobytes')->get($this->language).'.'
: rtrim($message, '.').' '.$this->lang->line('validation.characters')->get($this->language).'.'; : rtrim($message, '.').' '.Lang::line('validation.characters')->get($this->language).'.';
} }
return $message; return $message;
...@@ -542,7 +478,7 @@ class Validator { ...@@ -542,7 +478,7 @@ class Validator {
*/ */
protected function format_message($message, $attribute, $rule, $parameters) protected function format_message($message, $attribute, $rule, $parameters)
{ {
$display = $this->lang->line('attributes.'.$attribute)->get($this->language, str_replace('_', ' ', $attribute)); $display = Lang::line('attributes.'.$attribute)->get($this->language, str_replace('_', ' ', $attribute));
$message = str_replace(':attribute', $display, $message); $message = str_replace(':attribute', $display, $message);
...@@ -616,12 +552,4 @@ class Validator { ...@@ -616,12 +552,4 @@ class Validator {
return $this; return $this;
} }
/**
* Magic Method for calling custom registered validators.
*/
public function __call($method, $parameters)
{
return call_user_func_array($this->validators[$method], $parameters);
}
} }
\ No newline at end of file
<?php namespace Laravel; <?php namespace Laravel;
/** class View {
* The view factory class is responsible for the instantiation of Views. It is typically
* access through the application instance from a route or controller, and is managed
* as a singleton by the application IoC container.
*/
class View_Factory {
/** /**
* The view composer instance. * The name of the view.
* *
* @var View_Composer * @var string
*/ */
protected $composer; public $view;
/** /**
* The directory containing the views. * The view data.
*
* @var array
*/
public $data;
/**
* The path to the view on disk.
* *
* @var string * @var string
*/ */
protected $path; protected $path;
/** /**
* Create a new view factory instance. * Create a new view instance.
* *
* @param View_Composer $composer * @param string $view
* @param string $path * @param array $data
* @return void * @return void
*/ */
public function __construct(View_Composer $composer, $path) protected function __construct($view, $data = array())
{ {
$this->composer = $composer; $this->view = $view;
$this->path = $path; $this->data = $data;
$this->path = $this->path($view);
} }
/** /**
* Create a new view instance. * Create a new view instance.
* *
* The name of the view given to this method should correspond to a view * @param string $view
* within your application views directory. Dots or slashes may used to * @param array $data
* reference views within sub-directories.
*
* <code>
* // Create a new view instance
* $view = View::make('home.index');
*
* // Create a new view instance with bound data
* $view = View::make('home.index', array('name' => 'Fred'));
* </code>
*
* @param string $view
* @param array $data
* @return View * @return View
*/ */
public function make($view, $data = array()) public static function make($view, $data = array())
{ {
return new View($this, $this->composer, $view, $data, $this->path($view)); return new static($view, $data);
} }
/** /**
...@@ -75,11 +66,11 @@ class View_Factory { ...@@ -75,11 +66,11 @@ class View_Factory {
* @param array $data * @param array $data
* @return View * @return View
*/ */
protected function of($name, $data = array()) public static function of($name, $data = array())
{ {
if ( ! is_null($view = $this->composer->name($name))) if ( ! is_null($view = Composer::name($name)))
{ {
return $this->make($view, $data); return new static($view, $data);
} }
throw new \Exception("Named view [$name] is not defined."); throw new \Exception("Named view [$name] is not defined.");
...@@ -95,11 +86,11 @@ class View_Factory { ...@@ -95,11 +86,11 @@ class View_Factory {
{ {
$view = str_replace('.', '/', $view); $view = str_replace('.', '/', $view);
if (file_exists($path = $this->path.$view.'.blade'.EXT)) if (file_exists($path = VIEW_PATH.$view.'.blade'.EXT))
{ {
return $path; return $path;
} }
elseif (file_exists($path = $this->path.$view.EXT)) elseif (file_exists($path = VIEW_PATH.$view.EXT))
{ {
return $path; return $path;
} }
...@@ -107,149 +98,6 @@ class View_Factory { ...@@ -107,149 +98,6 @@ class View_Factory {
throw new \Exception('View ['.$view.'] does not exist.'); throw new \Exception('View ['.$view.'] does not exist.');
} }
/**
* Magic Method for handling the dynamic creation of named views.
*
* <code>
* // Create an instance of the "layout" named view
* $view = View::of_layout();
*
* // Create an instance of the "layout" named view with bound data
* $view = View::of_layout(array('name' => 'Fred'));
* </code>
*/
public function __call($method, $parameters)
{
if (strpos($method, 'of_') === 0)
{
return $this->of(substr($method, 3), Arr::get($parameters, 0, array()));
}
}
}
/**
* The view composer class is responsible for calling the composer on a view and
* searching through the view composers for a given view name. It is injected
* into the View_Factory and View instances themselves, and is managed as a singleton
* by the application IoC container.
*/
class View_Composer {
/**
* The view composers.
*
* @var array
*/
protected $composers;
/**
* Create a new view composer instance.
*
* @param array $composers
* @return void
*/
public function __construct($composers)
{
$this->composers = $composers;
}
/**
* Find the key for a view by name.
*
* @param string $name
* @return string
*/
public function name($name)
{
foreach ($this->composers as $key => $value)
{
if ($name === $value or (isset($value['name']) and $name === $value['name'])) { return $key; }
}
}
/**
* Call the composer for the view instance.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
if (isset($this->composers['shared'])) call_user_func($this->composers['shared'], $view);
if (isset($this->composers[$view->view]))
{
foreach ((array) $this->composers[$view->view] as $key => $value)
{
if ($value instanceof \Closure) return call_user_func($value, $view);
}
}
}
}
/**
* The view class is returned by the View Factory "make" method, and is the primary
* class for working with individual views. It provides methods for binding data to
* views as well as evaluating and rendering their contents.
*/
class View {
/**
* The name of the view.
*
* @var string
*/
public $view;
/**
* The view data.
*
* @var array
*/
public $data;
/**
* The path to the view on disk.
*
* @var string
*/
protected $path;
/**
* The view composer instance.
*
* @var View_Composer
*/
protected $composer;
/**
* The view factory instance, which is used to create sub-views.
*
* @var View_Factory
*/
protected $factory;
/**
* Create a new view instance.
*
* @param View_Factory $factory
* @param View_Composer $composer
* @param string $view
* @param array $data
* @param string $path
* @return void
*/
public function __construct(View_Factory $factory, View_Composer $composer, $view, $data, $path)
{
$this->view = $view;
$this->data = $data;
$this->path = $path;
$this->factory = $factory;
$this->composer = $composer;
}
/** /**
* Get the evaluated string content of the view. * Get the evaluated string content of the view.
* *
...@@ -260,7 +108,7 @@ class View { ...@@ -260,7 +108,7 @@ class View {
*/ */
public function render() public function render()
{ {
$this->composer->compose($this); Composer::compose($this);
foreach ($this->data as &$data) foreach ($this->data as &$data)
{ {
...@@ -304,7 +152,7 @@ class View { ...@@ -304,7 +152,7 @@ class View {
*/ */
public function partial($key, $view, $data = array()) public function partial($key, $view, $data = array())
{ {
return $this->with($key, $this->factory->make($view, $data)); return $this->with($key, new static($view, $data));
} }
/** /**
...@@ -359,4 +207,76 @@ class View { ...@@ -359,4 +207,76 @@ class View {
unset($this->data[$key]); unset($this->data[$key]);
} }
} /**
\ No newline at end of file * Magic Method for handling the dynamic creation of named views.
*
* <code>
* // Create an instance of the "layout" named view
* $view = View::of_layout();
*
* // Create an instance of the "layout" named view with bound data
* $view = View::of_layout(array('name' => 'Fred'));
* </code>
*/
public static function __callStatic($method, $parameters)
{
if (strpos($method, 'of_') === 0)
{
return static::of(substr($method, 3), Arr::get($parameters, 0, array()));
}
}
}
/**
* The view composer class is responsible for calling the composer on a view and
* searching through the view composers for a given view name.
*/
class Composer {
/**
* The view composers.
*
* @var array
*/
public static $composers;
/**
* Find the key for a view by name.
*
* @param string $name
* @return string
*/
public static function name($name)
{
foreach (static::$composers as $key => $value)
{
if ($name === $value or (isset($value['name']) and $name === $value['name'])) { return $key; }
}
}
/**
* Call the composer for the view instance.
*
* @param View $view
* @return void
*/
public static function compose(View $view)
{
if (isset(static::$composers['shared'])) call_user_func(static::$composers['shared'], $view);
if (isset(static::$composers[$view->view]))
{
foreach ((array) static::$composers[$view->view] as $key => $value)
{
if ($value instanceof \Closure) return call_user_func($value, $view);
}
}
}
}
/**
* Load the application's composers into the composers property.
*/
Composer::$composers = require APP_PATH.'composers'.EXT;
\ No newline at end of file
...@@ -43,4 +43,6 @@ $public = __DIR__; ...@@ -43,4 +43,6 @@ $public = __DIR__;
| 3... 2... 1... Lift-off! | 3... 2... 1... Lift-off!
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
require $laravel.'/laravel.php'; require $laravel.'/laravel.php';
\ No newline at end of file
echo number_format((microtime(true) - START_TIME) * 1000, 2);
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment