diff --git a/application/config/aliases.php b/application/config/aliases.php index 58d33a60..548b80d7 100644 --- a/application/config/aliases.php +++ b/application/config/aliases.php @@ -41,6 +41,7 @@ return array( 'Loader' => 'Laravel\\Facades\\Loader', 'Messages' => 'Laravel\\Validation\\Messages', 'Package' => 'Laravel\\Facades\\Package', + 'URI' => 'Laravel\\Facades\\URI', 'URL' => 'Laravel\\Facades\\URL', 'Redirect' => 'Laravel\\Facades\\Redirect', 'Request' => 'Laravel\\Facades\\Request', diff --git a/application/libraries/.gitignore b/application/libraries/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/changelog.md b/changelog.md index 66580658..19700181 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,13 @@ # Laravel Change Log +## Version 1.5.9 + +- Fixed bug in Eloquent relationship loading. + +### Upgrading from 1.5.8 + +- Replace **system** directory. + ## Version 1.5.8 - Fixed bug in form class that prevent name attributes from being set properly. diff --git a/laravel/arr.php b/laravel/arr.php index af2d6407..61a0e1fb 100644 --- a/laravel/arr.php +++ b/laravel/arr.php @@ -1,5 +1,7 @@ apc = $apc; $this->key = $key; - $this->proxy = $proxy; } /** @@ -50,7 +87,7 @@ class APC extends Driver { */ protected function retrieve($key) { - if ( ! is_null($cache = $this->proxy->apc_fetch($this->key.$key))) return $cache; + if ( ! is_null($cache = $this->apc->fetch($this->key.$key))) return $cache; } /** @@ -63,7 +100,7 @@ class APC extends Driver { */ public function put($key, $value, $minutes) { - $this->proxy->apc_store($this->key.$key, $value, $minutes * 60); + $this->apc->store($this->key.$key, $value, $minutes * 60); } /** @@ -74,7 +111,7 @@ class APC extends Driver { */ public function forget($key) { - $this->proxy->apc_delete($this->key.$key); + $this->apc->delete($this->key.$key); } } \ No newline at end of file diff --git a/laravel/config/container.php b/laravel/config/container.php index cc179d80..754f649d 100644 --- a/laravel/config/container.php +++ b/laravel/config/container.php @@ -4,23 +4,23 @@ return array( /* |-------------------------------------------------------------------------- - | Laravel Components + | Core Laravel Components |-------------------------------------------------------------------------- */ - 'laravel.asset' => array('singleton' => true, 'resolver' => function($container) + 'laravel.asset' => array('singleton' => true, 'resolver' => function($c) { - return new Asset($container->resolve('laravel.html')); + return new Asset($c->resolve('laravel.html')); }), - 'laravel.auth' => array('singleton' => true, 'resolver' => function($container) + 'laravel.auth' => array('singleton' => true, 'resolver' => function($c) { - return new Security\Auth($container->resolve('laravel.config'), $container->resolve('laravel.session')); + return new Security\Auth($c->resolve('laravel.config'), $c->resolve('laravel.session')); }), - 'laravel.config' => array('singleton' => true, 'resolver' => function($container) + 'laravel.config' => array('singleton' => true, 'resolver' => function($c) { $paths = array(SYS_CONFIG_PATH, CONFIG_PATH); @@ -33,11 +33,9 @@ return array( }), - 'laravel.crypter' => array('resolver' => function($container) + 'laravel.crypter' => array('resolver' => function($c) { - $key = $container->resolve('laravel.config')->get('application.key'); - - return new Security\Crypter(MCRYPT_RIJNDAEL_256, 'cbc', $key); + return new Security\Crypter(MCRYPT_RIJNDAEL_256, 'cbc', $c->resolve('laravel.config')->get('application.key')); }), @@ -47,132 +45,244 @@ return array( }), - 'laravel.database' => array('singleton' => true, 'resolver' => function($container) + 'laravel.database' => array('singleton' => true, 'resolver' => function($c) { - return new Database\Manager($container->resolve('laravel.config')); + return new Database\Manager($c->resolve('laravel.config')); }), - 'laravel.download' => array('singleton' => true, 'resolver' => function($container) + 'laravel.download' => array('singleton' => true, 'resolver' => function($c) { - return new Download($container->resolve('laravel.file')); + return new Download($c->resolve('laravel.file')); }), - 'laravel.file' => array('singleton' => true, 'resolver' => function($container) + 'laravel.file' => array('singleton' => true, 'resolver' => function($c) { - return new File($container->resolve('laravel.config')->get('mimes')); + return new File($c->resolve('laravel.config')->get('mimes')); }), - 'laravel.form' => array('singleton' => true, 'resolver' => function($container) + 'laravel.form' => array('singleton' => true, 'resolver' => function($c) { - list($request, $html, $url) = array( - $container->resolve('laravel.request'), - $container->resolve('laravel.html'), - $container->resolve('laravel.url'), - ); - - return new Form($request, $html, $url); + return new Form($c->resolve('laravel.request'), $c->resolve('laravel.html'), $c->resolve('laravel.url')); }), - 'laravel.hasher' => array('singleton' => true, 'resolver' => function($container) + 'laravel.hasher' => array('singleton' => true, 'resolver' => function($c) { return new Security\Hashing\Bcrypt(8, false); }), - 'laravel.html' => array('singleton' => true, 'resolver' => function($container) + 'laravel.html' => array('singleton' => true, 'resolver' => function($c) { - return new HTML($container->resolve('laravel.url'), $container->resolve('laravel.config')->get('application.encoding')); + return new HTML($c->resolve('laravel.url'), $c->resolve('laravel.config')->get('application.encoding')); }), - 'laravel.input' => array('singleton' => true, 'resolver' => function($container) + 'laravel.input' => array('singleton' => true, 'resolver' => function($c) { - $request = $container->resolve('laravel.request'); + 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(); - if ($request->method() == 'GET') + switch ($c->resolve('laravel.request')->method()) { - $input = $_GET; - } - elseif ($request->method() == 'POST') - { - $input = $_POST; - } - elseif ($request->method() == 'PUT' or $request->method == 'DELETE') - { - ($request->spoofed()) ? $input = $_POST : parse_str(file_get_contents('php://input'), $input); + 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_METHOD']); + unset($input[Request::spoofer]); - return new Input($container->resolve('laravel.file'), $container->resolve('laravel.cookie'), $input, $_FILES); + return $input; }), - 'laravel.lang' => array('singleton' => true, 'resolver' => function($container) + 'laravel.lang' => array('singleton' => true, 'resolver' => function($c) { require_once SYS_PATH.'lang'.EXT; - return new Lang_Factory($container->resolve('laravel.config'), array(SYS_LANG_PATH, LANG_PATH)); + return new Lang_Factory($c->resolve('laravel.config'), array(SYS_LANG_PATH, LANG_PATH)); }), - 'laravel.loader' => array('singleton' => true, 'resolver' => function($container) + 'laravel.loader' => array('singleton' => true, 'resolver' => function($c) { require_once SYS_PATH.'loader'.EXT; - $aliases = $container->resolve('laravel.config')->get('aliases'); + $aliases = $c->resolve('laravel.config')->get('aliases'); - return new Loader(array(BASE_PATH, APP_PATH.'models/', APP_PATH.'libraries/'), $aliases); + return new Loader(array(BASE_PATH, APP_PATH.'models/', APP_PATH), $aliases); }), - 'laravel.package' => array('singleton' => true, 'resolver' => function() + 'laravel.redirect' => array('singleton' => true, 'resolver' => function($c) { - return new Package(PACKAGE_PATH); + return new Redirect($c->resolve('laravel.url')); }), - 'laravel.redirect' => array('singleton' => true, 'resolver' => function($container) + 'laravel.request' => array('singleton' => true, 'resolver' => function($c) { - return new Redirect($container->resolve('laravel.url')); + return new Request($c->resolve('laravel.uri')->get(), $_SERVER, $_POST); }), - 'laravel.request' => array('singleton' => true, 'resolver' => function($container) - { - return new Request($_SERVER, $_POST, $container->resolve('laravel.config')->get('application.url')); - }), - - - 'laravel.response' => array('singleton' => true, 'resolver' => function($container) + 'laravel.response' => array('singleton' => true, 'resolver' => function($c) { require_once SYS_PATH.'response'.EXT; - return new Response_Factory($container->resolve('laravel.view'), $container->resolve('laravel.file')); + 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.router' => array('singleton' => true, 'resolver' => function($c) { return new Routing\Router($c->resolve('laravel.routing.loader'), CONTROLLER_PATH); }), - 'laravel.routing.loader' => array('singleton' => true, 'resolver' => function($container) + 'laravel.routing.loader' => array('singleton' => true, 'resolver' => function($c) { return new Routing\Loader(APP_PATH, ROUTE_PATH); }), - 'laravel.routing.caller' => array('resolver' => function($container) + 'laravel.routing.caller' => array('resolver' => function($c) { - return new Routing\Caller($container, require APP_PATH.'filters'.EXT, CONTROLLER_PATH); + return new Routing\Caller($c, require APP_PATH.'filters'.EXT, CONTROLLER_PATH); + }), + + /* + |-------------------------------------------------------------------------- + | Laravel Caching Components + |-------------------------------------------------------------------------- + */ + + 'laravel.cache' => array('singleton' => true, 'resolver' => function($c) + { + return new Cache\Manager($c, $c->resolve('laravel.config')->get('cache.driver')); + }), + + + 'laravel.cache.apc' => array('resolver' => function($c) + { + require_once SYS_PATH.'cache/drivers/apc'.EXT; + + $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) + { + return new Cache\Drivers\File($c->resolve('laravel.file'), CACHE_PATH); + }), + + + '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'), $key); + }), + + + 'laravel.cache.memcache.connection' => array('singleton' => true, 'resolver' => function($c) + { + $memcache = new \Memcache; + + foreach ($c->resolve('laravel.config')->get('cache.servers') as $server) + { + $memcache->addServer($server['host'], $server['port'], true, $server['weight']); + } + + if ($memcache->getVersion() === false) + { + throw new \Exception('Could not establish memcached connection. Please verify your memcached configuration.'); + } + + return $memcache; + }), + + /* + |-------------------------------------------------------------------------- + | Laravel Session Components + |-------------------------------------------------------------------------- + */ + + 'laravel.session.id' => array('singleton' => true, 'resolver' => function($c) + { + return $c->resolve('laravel.cookie')->get('laravel_session'); }), @@ -192,164 +302,35 @@ return array( }), - 'laravel.url' => array('singleton' => true, 'resolver' => function($container) + 'laravel.session.apc' => array('resolver' => function($c) { - list($request, $base, $index) = array( - $container->resolve('laravel.request'), - $container->resolve('laravel.config')->get('application.url'), - $container->resolve('laravel.config')->get('application.index'), - ); - - return new URL($container->resolve('laravel.routing.router'), $base, $index, $request->secure()); + return new Session\Drivers\APC($c->resolve('laravel.cache.apc')); }), - 'laravel.validator' => array('singleton' => true, 'resolver' => function($container) + 'laravel.session.cookie' => array('resolver' => function($c) { - require_once SYS_PATH.'validation/validator'.EXT; + $cookies = $c->resolve('laravel.cookie'); - return new Validation\Validator_Factory($container->resolve('laravel.lang')); + return new Session\Drivers\Cookie($c->resolve('laravel.crypter'), $cookies); }), - 'laravel.view' => array('singleton' => true, 'resolver' => function($container) + 'laravel.session.database' => array('resolver' => function($c) { - require_once SYS_PATH.'view'.EXT; - - return new View_Factory($container->resolve('laravel.view.composer'), VIEW_PATH); + return new Session\Drivers\Database($c->resolve('laravel.database')->connection()); }), - 'laravel.view.composer' => array('resolver' => function($container) + 'laravel.session.file' => array('resolver' => function($c) { - return new View_Composer(require APP_PATH.'composers'.EXT); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel Cookie Session Components - |-------------------------------------------------------------------------- - */ - - 'laravel.session.cookie' => array('resolver' => function($container) - { - $cookies = $container->resolve('laravel.cookie'); - - $config = $container->resolve('laravel.config')->get('session'); - - return new Session\Drivers\Cookie($container->resolve('laravel.crypter'), $cookies); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel Database Session Components - |-------------------------------------------------------------------------- - */ - - 'laravel.session.database' => array('resolver' => function($container) - { - $table = $container->resolve('laravel.config')->get('session.table'); - - return new Session\Drivers\Database($container->resolve('laravel.database')->connection()); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel Cache Manager - |-------------------------------------------------------------------------- - */ - - 'laravel.cache' => array('singleton' => true, 'resolver' => function($container) - { - return new Cache\Manager($container, $container->resolve('laravel.config')->get('cache.driver')); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel File Cache & Session Components - |-------------------------------------------------------------------------- - */ - - 'laravel.cache.file' => array('resolver' => function($container) - { - return new Cache\Drivers\File($container->resolve('laravel.file'), CACHE_PATH); + return new Session\Drivers\File($c->resolve('laravel.file'), SESSION_PATH); }), - 'laravel.session.file' => array('resolver' => function($container) + 'laravel.session.memcached' => array('resolver' => function($c) { - return new Session\Drivers\File($container->resolve('laravel.file'), SESSION_PATH); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel APC Cache & Session Components - |-------------------------------------------------------------------------- - */ - - 'laravel.cache.apc' => array('resolver' => function($container) - { - return new Cache\Drivers\APC(new Proxy, $container->resolve('laravel.config')->get('cache.key')); - }), - - - 'laravel.session.id' => array('singleton' => true, 'resolver' => function($container) - { - return $container->resolve('laravel.cookie')->get('laravel_session'); - }), - - - 'laravel.session.apc' => array('resolver' => function($container) - { - $lifetime = $container->resolve('laravel.config')->get('session.lifetime'); - - return new Session\Drivers\APC($container->resolve('laravel.cache.apc')); - }), - - /* - |-------------------------------------------------------------------------- - | Laravel Memcached Cache & Session Components - |-------------------------------------------------------------------------- - */ - - 'laravel.cache.memcached' => array('resolver' => function($container) - { - $connection = $container->resolve('laravel.cache.memcache.connection'); - - $key = $container->resolve('laravel.config')->get('cache.key'); - - return new Cache\Drivers\Memcached($connection, $key); - }), - - - 'laravel.session.memcached' => array('resolver' => function($container) - { - $lifetime = $container->resolve('laravel.config')->get('session.lifetime'); - - return new Session\Drivers\Memcached($container->resolve('laravel.cache.memcached')); - }), - - - 'laravel.cache.memcache.connection' => array('singleton' => true, 'resolver' => function($container) - { - if ( ! class_exists('Memcache')) - { - throw new \Exception('Attempting to use Memcached, but the Memcache PHP extension is not installed on this server.'); - } - - $memcache = new \Memcache; - - foreach ($container->resolve('laravel.config')->get('cache.servers') as $server) - { - $memcache->addServer($server['host'], $server['port'], true, $server['weight']); - } - - if ($memcache->getVersion() === false) - { - throw new \Exception('Memcached is configured. However, no connections could be made. Please verify your memcached configuration.'); - } - - return $memcache; + return new Session\Drivers\Memcached($c->resolve('laravel.cache.memcached')); }), ); \ No newline at end of file diff --git a/laravel/core.php b/laravel/core.php index 7962a561..f79fdd4d 100644 --- a/laravel/core.php +++ b/laravel/core.php @@ -69,4 +69,17 @@ spl_autoload_register(array($container->resolve('laravel.loader'), 'load')); // -------------------------------------------------------------- // Set the application environment configuration option. // -------------------------------------------------------------- -$container->resolve('laravel.config')->set('application.env', $env); \ No newline at end of file +$container->resolve('laravel.config')->set('application.env', $env); + +// -------------------------------------------------------------- +// Define some convenient global functions. +// -------------------------------------------------------------- +function e($value) +{ + return IoC::container()->resolve('laravel.html')->entities($value); +} + +function __($key, $replacements = array(), $language = null) +{ + return IoC::container()->resolve('laravel.lang')->line($key, $replacements, $language); +} \ No newline at end of file diff --git a/laravel/facades.php b/laravel/facades.php index 80901b11..1ba4a6b3 100644 --- a/laravel/facades.php +++ b/laravel/facades.php @@ -52,6 +52,7 @@ class Redirect extends Facade { public static $resolve = 'laravel.redirect'; } class Request extends Facade { public static $resolve = 'laravel.request'; } 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 diff --git a/laravel/file.php b/laravel/file.php index 06afeef7..72095804 100644 --- a/laravel/file.php +++ b/laravel/file.php @@ -79,7 +79,7 @@ class File { */ public function delete($path) { - @unlink($path); + if ($this->exists($path)) @unlink($path); } /** diff --git a/laravel/form.php b/laravel/form.php index 1082b7f5..63695f47 100644 --- a/laravel/form.php +++ b/laravel/form.php @@ -81,7 +81,7 @@ class Form { $attributes['accept-charset'] = $this->html->encoding; } - $append = ($method == 'PUT' or $method == 'DELETE') ? $this->hidden('_REQUEST_METHOD', $method) : ''; + $append = ($method == 'PUT' or $method == 'DELETE') ? $this->hidden(Request::spoofer, $method) : ''; return '