Тот же маршрут, но вызов другого контроллера в Laravel 5.1 routing
У меня есть два url-адреса: один для категории и один для бренда, например:
http://localhost/project/womens-fashion #category
http://localhost/project/babette-clothes #brand
Я просто хотел сделать один маршрут, но вызвать другой контроллер.
Я написал маршрут, но его не работает для меня его ошибка отправки. Смотрите ниже код:
<?php
use DB;
use IlluminateRoutingUrlGenerator;
use IlluminateSupportFacadesRedirect;
Route::get('/','HomeController@index');
Route::get('/product', array('uses' => 'ProductController@index'));
Route::get('/{slug}', function($slug) {
$result = DB::select('SELECT controller FROM url_setting where slug = ?', [$slug]);
if ($result[0]->pw_us_controller == 'CategoryController@view') {
return Redirect::action('CategoryController@view', array($slug));
} elseif ($result[0]->pw_us_controller == 'CategoryController@view') {
return Redirect::action('BrandController@index', array($slug));
} else {
return Redirect::action('HomeController@index');
}
});
Ошибка: InvalidArgumentException in UrlGenerator.php line 576: Action AppHttpControllersCategoryController@view not defined.
Я совсем запутался, что пошло не так? есть идеи!!!
2 ответов:
Вы должны определить маршрут для
CategoryController@view.Попробуйте добавить что-то вроде этого в файл маршрута:
Route::get('/category', 'CategoryController@view');---править---
Я просто лучше читаю вопрос. Я думаю, что вы хотели бы получить что-то вроде этого:
/womens-fashion --> CategoryController@view /babette-clothes --> BrandController@viewИ у вас есть слизни, хранящиеся в вашей БД.
Так что, возможно, перенаправление не является вашим решением.
Я бы сделал что-то вроде этого:
Route::get('/{slug}', 'SlugController@view');Контроллер
SlugController:class SlugController extends Controller { public function view(Request $request, $slug) { $result = DB::select('SELECT controller FROM url_setting where slug = ?', [$slug]); if ($result[0]->pw_us_controller == 'CategoryController@view') { return self::category($request, $slug); } else if ($result[0]->pw_us_controller == 'BrandController@view') { return self::brand($request, $slug); } else { // redirect to home } } private function category($request, $slug) { // Category controller function // .... } private function brand($request, $slug) { // Brand controller function // .... } }
Вы бы предпочли использовать следующий синтаксис:
return redirect()->action('CategoryController@view', array($slug));
Comments