|
@@ -1,61 +1,70 @@
|
|
<?php namespace Laravel;
|
|
<?php namespace Laravel;
|
|
|
|
|
|
-/**
|
|
|
|
- * Bootstrap the core framework components like the IoC container and
|
|
|
|
- * the configuration class, and the class auto-loader. Once this file
|
|
|
|
- * has run, the framework is essentially ready for use.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Bootstrap The Framework Core
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| By including this file, the core of the framework will be setup which
|
|
|
|
+| includes the class auto-loader, and the registration of any bundles.
|
|
|
|
+| Basically, once this file has been included, the entire framework
|
|
|
|
+| may be used by the developer.
|
|
|
|
+|
|
|
|
|
+*/
|
|
require 'core.php';
|
|
require 'core.php';
|
|
|
|
|
|
-/**
|
|
|
|
- * Register the PHP exception handler. The framework throws exceptions
|
|
|
|
- * on every error that cannot be handled. All of those exceptions will
|
|
|
|
- * be sent through this closure for processing.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Setup Error & Exception Handling
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Next we'll register custom handlers for all errors and exceptions so we
|
|
|
|
+| can display a clean error message for all errors, as well as do any
|
|
|
|
+| custom error logging that may be setup by the developer.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
set_exception_handler(function($e)
|
|
set_exception_handler(function($e)
|
|
{
|
|
{
|
|
Error::exception($e);
|
|
Error::exception($e);
|
|
});
|
|
});
|
|
|
|
|
|
-/**
|
|
|
|
- * Register the PHP error handler. All PHP errors will fall into this
|
|
|
|
- * handler which will convert the error into an ErrorException object
|
|
|
|
- * and pass the exception into the exception handler.
|
|
|
|
- */
|
|
|
|
|
|
+
|
|
set_error_handler(function($code, $error, $file, $line)
|
|
set_error_handler(function($code, $error, $file, $line)
|
|
{
|
|
{
|
|
Error::native($code, $error, $file, $line);
|
|
Error::native($code, $error, $file, $line);
|
|
});
|
|
});
|
|
|
|
|
|
-/**
|
|
|
|
- * Register the shutdown handler. This function will be called at the
|
|
|
|
- * end of the PHP script or on a fatal PHP error. If a PHP error has
|
|
|
|
- * occured, we will convert it to an ErrorException and pass it
|
|
|
|
- * to the common exception handler for the framework.
|
|
|
|
- */
|
|
|
|
|
|
+
|
|
register_shutdown_function(function()
|
|
register_shutdown_function(function()
|
|
{
|
|
{
|
|
Error::shutdown();
|
|
Error::shutdown();
|
|
});
|
|
});
|
|
|
|
|
|
-/**
|
|
|
|
- * Setting the PHP error reporting level to -1 essentially forces
|
|
|
|
- * PHP to report every error, and it is guranteed to show every
|
|
|
|
- * error on future versions of PHP.
|
|
|
|
- *
|
|
|
|
- * If error detail is turned off, we will turn off all PHP error
|
|
|
|
- * reporting and display since the framework will be displaying
|
|
|
|
- * a generic message and we do not want any sensitive details
|
|
|
|
- * about the exception leaking into the views.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Report All Errors
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| By setting error reporting to -1, we essentially force PHP to report
|
|
|
|
+| every error, and this is guranteed to show every error on future
|
|
|
|
+| releases of PHP. This allows everything to be fixed early!
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
error_reporting(-1);
|
|
error_reporting(-1);
|
|
|
|
|
|
-/**
|
|
|
|
- * Even though "Magic Quotes" are deprecated in PHP 5.3, they may
|
|
|
|
- * still be enabled on the server. To account for this, we will
|
|
|
|
- * strip slashes on all input arrays if magic quotes are turned
|
|
|
|
- * on for the server environment.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Magic Quotes Strip Slashes
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Even though "Magic Quotes" are deprecated in PHP 5.3.x, they may still
|
|
|
|
+| be enabled on the server. To account for this, we will strip slashes
|
|
|
|
+| on all input arrays if magic quotes are enabled for the server.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
if (magic_quotes())
|
|
if (magic_quotes())
|
|
{
|
|
{
|
|
$magics = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
|
|
$magics = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
|
|
@@ -66,12 +75,18 @@ if (magic_quotes())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * Gather the input to the application based on the global input
|
|
|
|
- * variables for the current request. The input will be gathered
|
|
|
|
- * based on the current request method and will be set on the
|
|
|
|
- * Input manager class' static $input property.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Sniff The Input For The Request
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Next we'll gather the input to the application based on the global input
|
|
|
|
+| variables for the current request. The input will be gathered based on
|
|
|
|
+| the current request method and will be set on the Input manager class
|
|
|
|
+| as a simple static $input property which can be easily accessed.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
$input = array();
|
|
$input = array();
|
|
|
|
|
|
switch (Request::method())
|
|
switch (Request::method())
|
|
@@ -97,90 +112,137 @@ switch (Request::method())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * The spoofed request method is removed from the input so it is not
|
|
|
|
- * unexpectedly included in Input::all() or Input::get(). Leaving it
|
|
|
|
- * in the input array could cause unexpected results if an Eloquent
|
|
|
|
- * model is filled with the input.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Remove The Spoofer Input
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| The spoofed request method is removed from the input so it is not in
|
|
|
|
+| the Input::all() or Input::get() results. Leaving it in the array
|
|
|
|
+| could cause unexpected results since the developer won't be
|
|
|
|
+| expecting it to be present.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
unset($input[Request::spoofer]);
|
|
unset($input[Request::spoofer]);
|
|
|
|
|
|
Input::$input = $input;
|
|
Input::$input = $input;
|
|
|
|
|
|
-/**
|
|
|
|
- * Load the "application" bundle. Though the application folder is
|
|
|
|
- * not typically considered a bundle, it is started like one and
|
|
|
|
- * essentially serves as the "default" bundle.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Start The Application Bundle
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| The application "bundle" is the default bundle for the installation and
|
|
|
|
+| we'll fire it up first. In this bundle's bootstrap, more configuration
|
|
|
|
+| will take place and the developer can hook into some of the core
|
|
|
|
+| framework events such as the configuration loader.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
Bundle::start(DEFAULT_BUNDLE);
|
|
Bundle::start(DEFAULT_BUNDLE);
|
|
|
|
|
|
-/**
|
|
|
|
- * Auto-start any bundles configured to start on every request.
|
|
|
|
- * This is especially useful for debug bundles or bundles that
|
|
|
|
- * are used throughout the application.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Auto-Start Other Bundles
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Bundles that are used throughout the application may be auto-started
|
|
|
|
+| so they are immediately available on every request without needing
|
|
|
|
+| to explicitly start them within the application.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
foreach (Bundle::$bundles as $bundle => $config)
|
|
foreach (Bundle::$bundles as $bundle => $config)
|
|
{
|
|
{
|
|
if ($config['auto']) Bundle::start($bundle);
|
|
if ($config['auto']) Bundle::start($bundle);
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * Register the "catch-all" route that handles 404 responses for
|
|
|
|
- * routes that can not be matched to any other route within the
|
|
|
|
- * application. We'll just raise the 404 event.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Register The Catch-All Route
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| This route will catch all requests that do not hit another route in
|
|
|
|
+| the application, and will raise the 404 error event so the error
|
|
|
|
+| can be handled by the developer in their 404 event listener.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
Routing\Router::register('*', '(:all)', function()
|
|
Routing\Router::register('*', '(:all)', function()
|
|
{
|
|
{
|
|
return Event::first('404');
|
|
return Event::first('404');
|
|
});
|
|
});
|
|
|
|
|
|
-/**
|
|
|
|
- * If the requset URI has too many segments, we will bomb out of
|
|
|
|
- * the request. This is too avoid potential DDoS attacks against
|
|
|
|
- * the framework by overloading the controller lookup method
|
|
|
|
- * with thousands of segments.
|
|
|
|
- */
|
|
|
|
-$uri = URI::current();
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Route The Incoming Request
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Phew! We can finally route the request to the appropriate route and
|
|
|
|
+| execute the route to get the response. This will give an instance
|
|
|
|
+| of the Response object that we can send back to the browser
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
|
|
-if (count(URI::$segments) > 15)
|
|
|
|
-{
|
|
|
|
- throw new \Exception("Invalid request. Too many URI segments.");
|
|
|
|
-}
|
|
|
|
|
|
+$uri = URI::current();
|
|
|
|
|
|
-/**
|
|
|
|
- * Route the request to the proper route in the application. If a
|
|
|
|
- * route is found, the route will be called via the request class
|
|
|
|
- * static property. If no route is found, the 404 response will
|
|
|
|
- * be returned to the browser.
|
|
|
|
- */
|
|
|
|
Request::$route = Routing\Router::route(Request::method(), $uri);
|
|
Request::$route = Routing\Router::route(Request::method(), $uri);
|
|
|
|
|
|
$response = Request::$route->call();
|
|
$response = Request::$route->call();
|
|
|
|
|
|
-/**
|
|
|
|
- * Close the session and write the active payload to persistent
|
|
|
|
- * storage. The session cookie will also be written and if the
|
|
|
|
- * driver is a sweeper, session garbage collection might be
|
|
|
|
- * performed depending on the "sweepage" probability.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Persist The Session To Storage
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| If a session driver has been configured, we will save the session to
|
|
|
|
+| storage so it is avaiable for the next request. This will also set
|
|
|
|
+| the session cookie in the cookie jar to be sent to the user.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
if (Config::get('session.driver') !== '')
|
|
if (Config::get('session.driver') !== '')
|
|
{
|
|
{
|
|
Session::save();
|
|
Session::save();
|
|
}
|
|
}
|
|
|
|
|
|
-/**
|
|
|
|
- * Send all of the cookies to the browser. The cookies are
|
|
|
|
- * stored in a "jar" until the end of a request, primarily
|
|
|
|
- * to make testing the cookie functionality of the site
|
|
|
|
- * much easier since the jar can be inspected.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Let's Eat Cookies
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| All cookies set during the request are actually stored in a cookie jar
|
|
|
|
+| until the end of the request so they can be expected by unit tests or
|
|
|
|
+| the developer. Here, we'll push them out to the browser.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
Cookie::send();
|
|
Cookie::send();
|
|
|
|
|
|
-/**
|
|
|
|
- * Send the final response to the browser and fire the
|
|
|
|
- * final event indicating that the processing for the
|
|
|
|
- * current request is completed.
|
|
|
|
- */
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| Send The Response To The Browser
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| We'll send the response back to the browser here. This method will also
|
|
|
|
+| send all of the response headers to the browser as well as the string
|
|
|
|
+| content of the Response. This should make the view available to the
|
|
|
|
+| browser and show something pretty to the user.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
$response->send();
|
|
$response->send();
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+| And We're Done!
|
|
|
|
+|--------------------------------------------------------------------------
|
|
|
|
+|
|
|
|
|
+| Raise the "done" event so extra output can be attached to the response
|
|
|
|
+| This allows the adding of debug toolbars, etc. to the view, or may be
|
|
|
|
+| used to do some kind of logging by the application.
|
|
|
|
+|
|
|
|
|
+*/
|
|
|
|
+
|
|
Event::fire('laravel.done');
|
|
Event::fire('laravel.done');
|