Laravel如何通过Route调用控制器中的方法?

时间:2018-06-02 18:16:34

标签: laravel laravel-routing

我无法理解路由的工作原理。我试着阅读Illuminate \ Routing \ Route但是无法掌握Laravel如何在控制器中调用方法。

让我们说:

 Route::get('/', 'WelcomeController@index');

我发现你可以这样称呼它

Route::get('/', function () {
    App::call('App\Http\Controllers\WelcomeController@index, []);
});

但是我无法在Route.php文件中读到任何附近的内容。

3 个答案:

答案 0 :(得分:3)

进入所有细节,有些事情要看:

Router@dispatch -> dispatchRoute
Router@runRoute
Router@runWithinStack
Route@run
   Route@runController
       ControllerDispatcher@dispatch
   Route@runCallable

Illuminate\Routing\Router Illuminate\Routing\Route Illuminate\Routing\ControllerDispatcher

这将引导您调度到控制器本身的实际调用。

答案 1 :(得分:1)

如果您看到App\Providers\RouteServiceProvider,则可以找到protected $namespace = 'App\Http\Controllers';

protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/web.php'));
} 

这意味着您的所有web.php路由,例如Route::get('/', 'WelcomeController@index');访问https:://your-domain/方法App\Http\Controllers\WelcomeController方法index

答案 2 :(得分:0)

它有点像野兽,但简而言之,你有:

  • index.php将捕获请求并通过Http Kernel发送。
  • Http Kernel会尝试将Request发送给Router
  • Router然后会找到适用的Route(如果有的话),获取Route的所有中间件,通过它们管道Request,最后run。{/ 1}} Route
  • 然后应返回Response,最终会在index.php文件中返回,然后将其发送。

<强> NB

&#34;运行&#34;路由将获取控制器方法或闭包,解决所有依赖关系,然后调用闭包/方法。