我是否必须在routes.php中定义每个控制器方法?

时间:2015-02-17 07:46:21

标签: laravel routes

这是我当前的routes.php文件:

<?php

Route::get('/', 'AdminController@index');
Route::get('/posts','PostsController@index');
Route::get('/posts/create','PostsController@create');
Route::get('/tags','TagsController@index');
Route::get('/health','HealthController@index');
Route::get('/health/create','HealthController@create');
Route::get('/health/categories','HealthController@categories');

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

如果我不这样做,我可以在刀片视图中使用帮助程序,比如操作。它抛出一个null异常。

所以问题是,我必须在这里定义所有控制器动作吗?否则我将无法直接使用它们?例如,在重定向到操作链接中。

将此添加到刀片:

<a href="{{ action('PostsController@index') }}">

抛出一个异常除非我专门添加Route :: get NOT工作路由,如果我向Route :: controllers添加一个条目。

也试过

<a href="{{ action('\App\Http\Controllers\PostsController@getIndex') }}">
<a href="{{ action('\App\Http\Controllers\PostsController@index') }}">

1 个答案:

答案 0 :(得分:2)

这里的问题是你的控制器动作名称。如果使用隐式控制器路由(Route::controllers),则方法名称必须以HTTP谓词开头。

而不是index(),您需要getIndex()

您可以使用php artisan route:list命令轻松检查Laravel实际注册的路由。

生成URL将如下所示:

<a href="{{ action('PostsController@getIndex') }}">

注意仅当您将PostsController添加到Route::controllers时,控制器路由才有效。 (我以为你这样做但只是为了确定)

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