route() 辅助函数不适用于 laravel 中的资源控制器,但 url() 可以。正常吗?

route() helper function does not work with resource controller in laravel, but url() do work. Is it normal?

我有一个这样注册的标准资源控制器:

Route::resource('/movies', \App\Http\Controllers\MovieController::class );

我检查了 php artisan route:list 并且我有 get 'movies' 路由。

但是在blade模板中

<a href="{{ route('movies') }}" class="hover:text-gray-300">Movies</a>

不再有效。

而且只有

<a href="{{ url('movies') }}" class="hover:text-gray-300">Movies</a>

有效。

在那之前我有:

Route::get('/movies', function () {
    return view('movies');
})->name('movies');

路由方法有效。

所以 url() 方法在任何地方都有效,而 route() 仅在特定情况下有效。

谁能告诉我这两种方法的主要区别是什么?

什么时候应该使用哪一个?

主要问题 - route() 方法不适用于资源控制器是否正常,还是我的代码有问题?

既然 url() 无处不在,我应该忘记 route() 方法不可靠吗?

如果您查看 php artisan route:list 的结果,您会看到几条路线,例如

|        | POST      | movies                     | movies.store        | App\Http\Controllers\MovieController@store        | web        |
|        | GET|HEAD  | movies                     | movies.index        | App\Http\Controllers\MovieController@index        | web        |
|        | DELETE    | movies/{movie}            | movies.destroy      | App\Http\Controllers\MovieController@destroy      | web        |
|        | PUT|PATCH | movies/{movie}            | movies.update       | App\Http\Controllers\MovieController@update       |

route() 和 url() 接受不同的值。
route() 将接受路线名称,例如movies.index、movies.destroy、movies.update 和
url() 将接受电影,movies/23.

route() 将为您 select 正确的方法(GET、POST、PATCH、DELETE)但是
url() 只会提供路径。