Вход Регистрация
Файл: gapps/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
Строк: 217
<?php

namespace IlluminateRouting;

use 
IlluminateHttpRequest;
use 
IlluminateSupportCollection;
use 
IlluminateContainerContainer;

class 
ControllerDispatcher
{
    use 
RouteDependencyResolverTrait;

    
/**
     * The router instance.
     *
     * @var IlluminateRoutingRouter
     */
    
protected $router;

    
/**
     * The IoC container instance.
     *
     * @var IlluminateContainerContainer
     */
    
protected $container;

    
/**
     * Create a new controller dispatcher instance.
     *
     * @param  IlluminateRoutingRouter  $router
     * @param  IlluminateContainerContainer  $container
     * @return void
     */
    
public function __construct(Router $router,
                                
Container $container null)
    {
        
$this->router $router;
        
$this->container $container;
    }

    
/**
     * Dispatch a request to a given controller and method.
     *
     * @param  IlluminateRoutingRoute  $route
     * @param  IlluminateHttpRequest  $request
     * @param  string  $controller
     * @param  string  $method
     * @return mixed
     */
    
public function dispatch(Route $routeRequest $request$controller$method)
    {
        
$instance $this->makeController($controller);

        return 
$this->callWithinStack($instance$route$request$method);
    }

    
/**
     * Make a controller instance via the IoC container.
     *
     * @param  string  $controller
     * @return mixed
     */
    
protected function makeController($controller)
    {
        
Controller::setRouter($this->router);

        return 
$this->container->make($controller);
    }

    
/**
     * Call the given controller instance method.
     *
     * @param  IlluminateRoutingController  $instance
     * @param  IlluminateRoutingRoute  $route
     * @param  IlluminateHttpRequest  $request
     * @param  string  $method
     * @return mixed
     */
    
protected function callWithinStack($instance$route$request$method)
    {
        
$shouldSkipMiddleware $this->container->bound('middleware.disable') &&
                                
$this->container->make('middleware.disable') === true;

        
$middleware $shouldSkipMiddleware ? [] : $this->getMiddleware($instance$method);

        
// Here we will make a stack onion instance to execute this request in, which gives
        // us the ability to define middlewares on controllers. We will return the given
        // response back out so that "after" filters can be run after the middlewares.
        
return (new Pipeline($this->container))
                    ->
send($request)
                    ->
through($middleware)
                    ->
then(function ($request) use ($instance$route$method) {
                        return 
$this->router->prepareResponse(
                            
$request$this->call($instance$route$method)
                        );
                    });
    }

    
/**
     * Get the middleware for the controller instance.
     *
     * @param  IlluminateRoutingController  $instance
     * @param  string  $method
     * @return array
     */
    
public function getMiddleware($instance$method)
    {
        
$results = new Collection;

        foreach (
$instance->getMiddleware() as $name => $options) {
            if (! 
$this->methodExcludedByOptions($method$options)) {
                
$results[] = $this->router->resolveMiddlewareClassName($name);
            }
        }

        return 
$results->flatten()->all();
    }

    
/**
     * Determine if the given options exclude a particular method.
     *
     * @param  string  $method
     * @param  array  $options
     * @return bool
     */
    
public function methodExcludedByOptions($method, array $options)
    {
        return (isset(
$options['only']) && ! in_array($method, (array) $options['only'])) ||
            (! empty(
$options['except']) && in_array($method, (array) $options['except']));
    }

    
/**
     * Call the given controller instance method.
     *
     * @param  IlluminateRoutingController  $instance
     * @param  IlluminateRoutingRoute  $route
     * @param  string  $method
     * @return mixed
     */
    
protected function call($instance$route$method)
    {
        
$parameters $this->resolveClassMethodDependencies(
            
$route->parametersWithoutNulls(), $instance$method
        
);

        return 
$instance->callAction($method$parameters);
    }
}
Онлайн: 1
Реклама