public RouteBuilder::rebuild()
Rebuilds the route information and dumps it.
Return value
bool Returns TRUE if the rebuild succeeds, FALSE otherwise.
Overrides RouteBuilderInterface::rebuild
File
- core/lib/Drupal/Core/Routing/RouteBuilder.php, line 119
Class
- RouteBuilder
- Managing class for rebuilding the router table.
Namespace
Drupal\Core\Routing
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | public function rebuild() { if ( $this ->building) { throw new \RuntimeException( 'Recursive router rebuild detected.' ); } if (! $this ->lock->acquire( 'router_rebuild' )) { // Wait for another request that is already doing this work. // We choose to block here since otherwise the routes might not be // available, resulting in a 404. $this ->lock->wait( 'router_rebuild' ); return FALSE; } $this ->building = TRUE; $collection = new RouteCollection(); foreach ( $this ->getRouteDefinitions() as $routes ) { // The top-level 'routes_callback' is a list of methods in controller // syntax, see \Drupal\Core\Controller\ControllerResolver. These methods // should return a set of \Symfony\Component\Routing\Route objects, either // in an associative array keyed by the route name, which will be iterated // over and added to the collection for this provider, or as a new // \Symfony\Component\Routing\RouteCollection object, which will be added // to the collection. if (isset( $routes [ 'route_callbacks' ])) { foreach ( $routes [ 'route_callbacks' ] as $route_callback ) { $callback = $this ->controllerResolver->getControllerFromDefinition( $route_callback ); if ( $callback_routes = call_user_func( $callback )) { // If a RouteCollection is returned, add the whole collection. if ( $callback_routes instanceof RouteCollection) { $collection ->addCollection( $callback_routes ); } // Otherwise, add each Route object individually. else { foreach ( $callback_routes as $name => $callback_route ) { $collection ->add( $name , $callback_route ); } } } } unset( $routes [ 'route_callbacks' ]); } foreach ( $routes as $name => $route_info ) { $route_info += array ( 'defaults' => array (), 'requirements' => array (), 'options' => array (), 'host' => NULL, 'schemes' => array (), 'methods' => array (), 'condition' => '' , ); $route = new Route( $route_info [ 'path' ], $route_info [ 'defaults' ], $route_info [ 'requirements' ], $route_info [ 'options' ], $route_info [ 'host' ], $route_info [ 'schemes' ], $route_info [ 'methods' ], $route_info [ 'condition' ]); $collection ->add( $name , $route ); } } // DYNAMIC is supposed to be used to add new routes based upon all the // static defined ones. $this ->dispatcher->dispatch(RoutingEvents::DYNAMIC, new RouteBuildEvent( $collection )); // ALTER is the final step to alter all the existing routes. We cannot stop // people from adding new routes here, but we define two separate steps to // make it clear. $this ->dispatcher->dispatch(RoutingEvents::ALTER, new RouteBuildEvent( $collection )); $this ->checkProvider->setChecks( $collection ); $this ->dumper->addRoutes( $collection ); $this ->dumper->dump(); $this ->lock->release( 'router_rebuild' ); $this ->dispatcher->dispatch(RoutingEvents::FINISHED, new Event()); $this ->building = FALSE; $this ->rebuildNeeded = FALSE; return TRUE; } |
Please login to continue.