Я получаю ошибку 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('ErrorsController@getAccessDenied', '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?} | | ErrorsController@getIndex | | |
| | GET|HEAD error | | ErrorsController@getIndex | | |
| | GET|HEAD error/access-denied/{one?}/{two?}/{three?}/{four?}/{five?} | | ErrorsController@getAccessDenied | | |
| | GET|HEAD|POST|PUT|PATCH|DELETE error/{_missing} | | ErrorsController@missingMethod | | |
+--------+------------------------------------------------------------------------------------------------+------+--------------------------------------+----------------+---------------+
Работают только семенон и четвертые.
Как-то я нашел проблему.
По какой-то причине мой сервер Apache не переписывает маршрут mytestdomain.com/error/*. Вероятно, это связано с ошибкой слова и модулем apache mod_rewrite.
В любом случае, определение маршрута следующим образом решает проблему.
Route::controller('fail', 'ErrorsController');
Похоже, что указание маршрута таким образом, как у вас, не будет работать. Этот тип маршрутизации работает только для запросов RESTful. См.> Http://laravel.com/docs/4.2/controllers#restful-resource-controllers >.
Возможно, вам придется явно указать маршрут с помощью Route :: get/post.
Route::controller()
является способом определения неявных контроллеров.