Как я могу использовать маршруты / подстановочные знаки в Laravel?

Я использую Laravel 5 и вам нужно сделать шаблон подстановочного знака, посылая пользователя на разные контроллеры на основе типа URL, вытаскиваемого из базы данных.

Мне нужно проверить URL-адрес в базе данных, а затем загрузить соответствующий контроллер / метод на основе типа slug, хранящегося в базе данных. Я борюсь с последней частью, которая отправляет пользователя на соответствующий контроллер. Ниже мой маршрут:

Route::any('{slug}', function($slug){ $url = \App\Url_slug::where('url_slug', $slug)->first(); if($url->count()){ switch($url->url_type){ case 'product': // SEND USER TO PRODUCT CONTROLLER break; case 'category': // SEND USER TO CATEGORY CONTROLLER break; case 'page': // SEND USER TO PAGE CONTROLLER break; } } else { abort(404); } }); 

Что мне нужно, чтобы заменить комментарии, чтобы отправить пользователя на соответствующий контроллер?

Для этого вам нужно загрузить экземпляр app() а затем вызвать метод make('Controller') а также callAction . Полный маршрут ниже:

 Route::any('{slug}', function($slug){ $url = \App\Url_slug::where('url_slug', $slug)->first(); if($url->count()){ $app = app(); switch($url->url_type){ case 'product': $controller = $app->make('App\Http\Controllers\ProductController'); break; case 'category': $controller = $app->make('App\Http\Controllers\CategoryController'); break; case 'page': $controller = $app->make('App\Http\Controllers\PageController'); break; } return $controller->callAction('view', ['url_slug' => $url->url_slug, 'url_slug_id' => $url->id]); } else { abort(404); } }); 

Вы можете просто разрешить экземпляр контроллера из контейнера службы и вызвать методы:

 return app('App\Http\Controllers\ProductController')->show($product); 

Это вызовет действие ProductController@show , передаст все, что есть в $product в качестве параметра и вернет обработанный шаблон Blade.