Тот же маршрут, но вызов другого контроллера в 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.



Я совсем запутался, что пошло не так? есть идеи!!!

719   2  

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

    Ничего не найдено.