2015-07-25 2 views
2

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

Route::controller('home', 'HomeController'); 

в моих маршрутах, чтобы связать все маршруты в мой контроллер.

У меня есть функция getIndex() в моем контроллере, которая выполняется, когда я перехожу в '/ home'.

У меня есть случай, когда я хотел бы навести маршрут на «/ home/slug», но не всегда.

Я пробовал использовать getIndex($slug), но он всегда запрашивает '/ home/index/{slug?}'. Я не хочу, чтобы индекс отображался.

ответ

4

Невозможно использовать неявные контроллеры, насколько идет документация (поскольку, как представляется, применяется шаблон RESTFUL).

Но ваш может создать новый маршрут только для этого:

Route::get('home/{slug}','[email protected]'); 
    Route::controller('home', 'HomeController'); 

Edit: как указано Стивом метод контроллера должен прийти после того, как метода GET так один не заменяет другой.

+2

Спасибо за ответ @Arthur Samarcos, это почти работает, но мне нужно поставить маршрут ПОЛУЧИТЬ перед установкой моего маршрута контроллера в противном случае Laravel не может найти метод, связанный (посмотрел в неявных методах контроллера). Правильный код: 'Route :: get ('home/{slug}', 'HomeController @ slugIndex'); Route :: controller ('home', 'HomeController'); ' –

+1

Спасибо, я изменю ответ, чтобы избежать этой проблемы. –

+1

Извините @Arthur Samarcos, но он все равно не работает. Я нашел решение, я отвечу. –

4

ответ Артура был:

Route::get('home/{slug}','[email protected]'); 
Route::controller('home', 'HomeController'); 

Хотя это не работает, потому что все написано после того, как «дома /» теперь будет идти в первый маршрут (и HomeController @ slugedIndex).

Я нашел обходное решение. Я вынул маршрут в routes.php:

Route::controller('home', 'HomeController'); 

Тогда в моем HomeController, я использовал missingmethod(), что называется, когда метод не найден в контроллере.

Вот недостающее метод:

public function missingMethod($parameters = array()) 
{ 
    $sSlug = is_string($parameters) ? $parameters : ''; 
    $oObject = Object::where('slug', $sSlug)->first(); 

    if ($oObject) { 
     // slug code 
    } 
    else { 
      // 404 code 
    } 
} 
Смежные вопросы