2015-02-19 2 views
0

Я получаю ошибку 404 при попытке получить доступ к маршруту, связанному с действием контроллера.Действия контроллера Laravel возвращают ошибку 404

У меня есть маршрут, определенный как это в моем routes.php файл.

Route::controller('error', 'ErrorsController'); 

ErrorsController класс выглядит следующим образом.

class ErrorsController extends BaseController { 

    public function __construct() 
    { 
     // vacio 
    } 

    public function getIndex() 
    { 
     return View::make('error.accessdenied'); 
    } 

    public function getAccessDenied() 
    { 
     return View::make('error.accessdenied'); 
    } 
} 

У меня есть вид со ссылкой на chek, если он работает правильно. Ссылка создается следующим образом

{{ HTML::linkAction('[email protected]', 'Error') }} 

Когда я нажимаю на ссылку на страницу переходит к URL «mytestdomain.com/error/access-denied» возвращающий ошибку 404, но когда я получить доступ к URL 'mytestdomain.com/error' работает отлично.

Любая идея о том, что я делаю неправильно?

EDIT: Запуск команды php artisan routes эти маршруты, указывающие на ErrorsController:

+--------+------------------------------------------------------------------------------------------------+------+--------------------------------------+----------------+---------------+ 
| Domain | URI                       | Name | Action        | Before Filters | After Filters | 
+--------+------------------------------------------------------------------------------------------------+------+--------------------------------------+----------------+---------------+ 
|  | GET|HEAD error/index/{one?}/{two?}/{three?}/{four?}/{five?}         |  | [email protected]   |    |    | 
|  | GET|HEAD error                     |  | [email protected]   |    |    | 
|  | GET|HEAD error/access-denied/{one?}/{two?}/{three?}/{four?}/{five?}       |  | [email protected]  |    |    | 
|  | GET|HEAD|POST|PUT|PATCH|DELETE error/{_missing}            |  | [email protected]  |    |    | 
+--------+------------------------------------------------------------------------------------------------+------+--------------------------------------+----------------+---------------+ 

Только sencond и четвертый из них работают.

ответ

0

Как-то я нашел проблему.

По какой-то причине мой сервер Apache не переписывает mytestdomain.com/error/ * route. Вероятно, это связано с ошибкой слова и модулем apache mod_rewrite.

В любом случае, определение маршрута следующим образом решает проблему.

Route::controller('fail', 'ErrorsController'); 
0

Похоже, что указание маршрута таким образом, как у вас, не будет работать. Этот тип маршрутизации работает только для запросов RESTful. См.>http://laravel.com/docs/4.2/controllers#restful-resource-controllers>.

Возможно, вам придется явно указать маршрут, используя Route :: get/post.

+0

Изменение пути устраняет проблему, однако все маршруты к моим другим контроллерам определяются так же, как и этот, и работают тоже. – Lerzenit

+0

Кроме того, согласно документации laravel [здесь] (http://laravel.com/docs/4.2/controllers#implicit-controllers) 'Route :: controller()' является способом определения _Implicit controllers_ – Lerzenit

+0

Вы пытались запустить 'php artisan routes'? Это может пролить свет на доступные маршруты. Вероятно, вы уже знаете это, но «mytestdomain.com/error» работает, потому что маршрутизатор Laravel сопоставляет любой «корневой» уровень URL-адреса для действия индекса. В этом случае действие 'getIndex()'. – ediblemanager

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