我无法理解路由的工作原理。我试着阅读Illuminate \ Routing \ Route但是无法掌握Laravel如何在控制器中调用方法。
让我们说:
Route::get('/', 'WelcomeController@index');
我发现你可以这样称呼它
Route::get('/', function () {
App::call('App\Http\Controllers\WelcomeController@index, []);
});
但是我无法在Route.php文件中读到任何附近的内容。
答案 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;路由将获取控制器方法或闭包,解决所有依赖关系,然后调用闭包/方法。