2015-02-17 2 views
0

Это мой текущий файл routes.php:Должен ли я определять каждый метод контроллера в routes.php?

<?php 

Route::get('/', '[email protected]'); 
Route::get('/posts','[email protected]'); 
Route::get('/posts/create','[email protected]'); 
Route::get('/tags','[email protected]'); 
Route::get('/health','[email protected]'); 
Route::get('/health/create','[email protected]'); 
Route::get('/health/categories','[email protected]'); 

Route::controllers([ 
    'auth' => 'Auth\AuthController', 
    'password' => 'Auth\PasswordController' 
]); 

Если я не делаю что для exmaple, я canbt использовать помощник в представлениях лезвий, как действие. Он выдает пустое исключение.

Итак, вопрос в том, должен ли я определять здесь все действия контроллера? Или я не смогу использовать их напрямую? Например, в ссылке перенаправления на действие.

Добавление этого к клинку:

<a href="{{ action('[email protected]') }}"> 

бросает исключение ПОКА я специально добавить маршрут с Route :: получить не работаю, если я добавить запись маршрут :: контроллеры.

Пробовал также

<a href="{{ action('\App\Http\Controllers\[email protected]') }}"> 
<a href="{{ action('\App\Http\Controllers\[email protected]') }}"> 
+1

На самом деле вы должны быть в состоянии. Пожалуйста, покажите код, который генерирует исключение, и само сообщение об ошибке – lukasgeiter

+0

Обновлено сообщение – e4rthdog

+0

Вам нужно определить маршрут 'controller' или отдельные маршруты. Этот блог имеет отношение к делу: https://philsturgeon.uk/blog/2013/07/beware-the-route-to-evil/ – Laurence

ответ

2

Проблема вот ваши имена действий контроллера. Если вы используете неявные маршруты контроллера (Route::controllers), ваши имена методов должны быть начать с HTTP-глагола.

Вместо index() вам необходимо getIndex().

Вы можете легко проверить, какие маршруты Laravel действительно регистрирует, используя команду php artisan route:list.

Генерация URL будет выглядеть следующим образом:

<a href="{{ action('[email protected]') }}"> 

Примечание маршрутизации Контроллер работает только при добавлении PostsController к Route::controllers. (Я предположил, что вы сделали это, но просто чтобы убедиться)

Route::controllers([ 
    'auth' => 'Auth\AuthController', 
    'password' => 'Auth\PasswordController', 
    'posts' => `PostsController` 
]); 
+0

FYI - он фактически не регистрирует 'PostsController' на своих маршрутах. Он задается вопросом, похоже ли это на Codeigniter, где есть автоматическое сопоставление маршрутов контроллера (там, где очевидно, нет) – Laurence

+0

Я так не думаю: * "выбрасывает исключение UNLESS я специально добавляю маршрут с Route :: get NOT working if i добавьте запись в Route :: controller. "*. Но в любом случае, я добавлю к сведению ответ. – lukasgeiter

+0

Да, он говорит, есть ли способ, который ему не нужно специально добавлять? По крайней мере, это то, о чем я думаю, он спрашивает – Laurence

Смежные вопросы