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

Do i have to define every controller method in routes.php?

这是我当前的 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'
]);

如果我不这样做,例如,我不能在 blade 视图中使用助手,比如动作。它抛出一个空异常。

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

将此添加到 blade:

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

抛出异常,除非我特别添加带有 Route::get 的路由 如果我向 Route::controllers 添加条目,则不工作。

也试过

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

这里的问题是您的控制器操作名称。如果您使用隐式控制器路由 (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`
]);