Illuminate/Routing/RoutingServiceProvider.php


<?php namespace Illuminate\Routing;

use Illuminate\Support\ServiceProvider;

class RoutingServiceProvider extends ServiceProvider {

    
/** * Register the service provider. * 注册服务提供者。 * * @return void */ public function register() { // 注册路由实例 Illuminate\Routing\Router $this->registerRouter(); // 注册 Url 生成器实例 Illuminate\Routing\UrlGenerator $this->registerUrlGenerator(); // 注册 Redirector(跳转)实例 Illuminate\Routing\Redirector $this->registerRedirector(); // 注册 Response(响应)实例 Illuminate\Routing\ResponseFactory $this->registerResponseFactory(); }
/** * Register the router instance. * 注册路由实例。 * * @return void */ protected function registerRouter() { $this->app['router'] = $this->app->share(function($app) { return new Router($app['events'], $app); }); }
/** * Register the URL generator service. * 注册 Url 生成器实例。 * * @return void */ protected function registerUrlGenerator() { $this->app['url'] = $this->app->share(function($app) { $routes = $app['router']->getRoutes(); // The URL generator needs the route collection that exists on the router. // Keep in mind this is an object, so we're passing by references here // and all the registered routes will be available to the generator. $app->instance('routes', $routes); $url = new UrlGenerator( $routes, $app->rebinding( 'request', $this->requestRebinder() ) ); $url->setSessionResolver(function() { return $this->app['session']; }); // If the route collection is "rebound", for example, when the routes stay // cached for the application, we will need to rebind the routes on the // URL generator instance so it has the latest version of the routes. $app->rebinding('routes', function($app, $routes) { $app['url']->setRoutes($routes); }); return $url; }); }
/** * Get the URL generator request rebinder. * * @return \Closure */ protected function requestRebinder() { return function($app, $request) { $app['url']->setRequest($request); }; }
/** * Register the Redirector service. * 注册 Redirector(跳转)服务。 * * @return void */ protected function registerRedirector() { $this->app['redirect'] = $this->app->share(function($app) { $redirector = new Redirector($app['url']); // If the session is set on the application instance, we'll inject it into // the redirector instance. This allows the redirect responses to allow // for the quite convenient "with" methods that flash to the session. if (isset($app['session.store'])) { $redirector->setSession($app['session.store']); } return $redirector; }); }
/** * Register the response factory implementation. * 注册 Response(响应)实例。 * * @return void */ protected function registerResponseFactory() { $this->app->singleton('Illuminate\Contracts\Routing\ResponseFactory', function($app) { return new ResponseFactory($app['Illuminate\Contracts\View\Factory'], $app['redirect']); }); } }