Как Laravel вызывает метод в контроллере через Route? - PullRequest
0 голосов
/ 02 июня 2018

Я не могу понять, как работает маршрутизация.Я пытался прочитать Illuminate \ Routing \ Route, но не могу понять, как Laravel вызывает метод в контроллере.

Допустим, у нас есть:

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

Я обнаружил, что вы можете вызвать егокак это

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

Но я не могу прочитать ничего подобного в файле Route.php.

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Не вдаваясь во все детали, нужно кое-что посмотреть:

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

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

Это приведет вас от отправки к фактическому вызовуна самом контроллере.

0 голосов
/ 02 июня 2018

Это немного зверь, но в двух словах:

  • index.php перехватит запрос и отправит его через Http Kernel.
  • Http Kernel попытается отправить Request на Router.
  • Router найдет соответствующий Route (если он есть), получит все промежуточное программное обеспечение для Route, проложит через него Request и, наконец, run the Route.
  • Это должно затем вернуть Response, который в конечном итоге будет возвращен в файле index.php, который отправит его.

NB

«Выполнение» маршрута получит метод контроллера или замыкание, разрешит все зависимости и затем вызовет замыкание / метод.

0 голосов
/ 02 июня 2018

Если вы видите 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\WelcomeControllerindex

...