在十月路由器中,如何命名端点,并用名称获取 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') }}
当我为我的插件 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') }}