这是我当前的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') }}">
答案 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`
]);