在十月路由器中,如何命名端点,并用名称获取 URL

In October router, how to name endpoint, and get URL with the name

当我为我的插件 routes.php 中定义的端点命名并尝试通过浏览器访问该端点时,它会抛出一个错误,显示如下:

Function name must be a string
/path/to/my/src/vendor/laravel/framework/src/Illuminate/Routing/Route.php line 197

我关注了 the October document,它看起来像下面 plugins/me/myplugin/routes.php;

Route::get(
    'api/v1/my/endpoint',
    ['as' => 'myEndpoint', 'Me\MyPlugin\Http\MyEndpoint@show']
);

另一方面,通过名称获取 URL 可以使用以下两种方式。

$url = Url::route('myEndpoint');

$url = route('myEndpoint');

然后,我尝试了Laravel 5.5 document中描述的方法,如下所示;

Route::get(
    'api/v1/my/endpoint',
    'Me\MyPlugin\Http\MyEndpoint@show'
)->name('myEndpoint');

现在,通过浏览器访问端点没问题,但是,通过名称获取 URL 会出错。

Route [myEndpoint] not defined.
/path/to/my/src/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php line 305

我是不是做错了什么?

我找到了一个解决方法,虽然没有记录但工作正常。 在 routes.php 中定义端点,例如;

Route::name('myEndpoint')->get(
    'api/v1/my/endpoint',
    'Me\MyPlugin\Http\MyEndpoint@show'
);

现在,端点可以访问了,我可以通过 Url::route 方法和 route 帮助程序获得 URL。

但是,我仍然希望我的问题中的这些示例也能正常工作。 我还没有发现他们有什么问题。

仅供参考,命名组的工作方式如 October document 中所述。

Route::group(['prefix' => 'api/v1', 'as' => 'api_v1::'], function () {
    Route::name('myEndpoint')->get(
        'api/v1/my/endpoint',
        'Me\MyPlugin\Http\MyEndpoint@show'
    );
});

然后,获得URL个赞;

Url::route('api_v1::myEndpoint');

更新 (2020/02/28)

不使用 name 方法,将名称作为 as 选项也可以,如下所示。

Route::group(['prefix' => 'api/v1', 'as' => 'api_v1::'], function () {
    Route::get('api/v1/my/endpoint', [
        'as' => 'myEndpoint',
        'uses' => 'Me\MyPlugin\Http\MyEndpoint@show',
    ]);
});

在 routes.php 中定义端点,如:

Route::get('/api/v1/my/endpoint','Me\MyPlugin\Http\MyEndpoint@show') ->name('myEndpoint')

得到 url : {{ route('myEndpoint') }}