在我的示例中,我定义了一条路线:
Route::prefix('home')->group(function(){
Route::get('/test',....);
});
当我访问mydomain/home/test,
时,它可以工作。但是,我不知道prefix
方法的位置。我认为它可能位于Illuminate\Routing\Route.php.
中,但是当我删除该方法上的prefix
方法时,它仍然有效吗?
答案 0 :(得分:0)
prefix
方法可用于为组中的每个路由添加给定的URI前缀。
您可以使用以下代码:
Route::group(['prefix' => 'home'], function () {
Route::get('test', 'yourController@yourFunctions');
}
或这个
Route::prefix('home')->group(function () {
Route::get('test', 'yourController@yourFunctions');
});
没关系,因为它给出相同的结果。
更多信息:https://laravel.com/docs/5.4/routing#route-group-prefixes
答案 1 :(得分:0)
prefix
方法位于Illuminate\Routing\Router
类中。
在典型的Laravel 5应用程序中,绝对路径为:
vendor/laravel/framework/src/Illuminate/Routing/Router.php
如何找到它?
您可能知道,当您编写Route::
时,实际上是在使用名为Route
的Laravel门面。从那里可以在https://laravel.com/docs/5.4/facades#facade-class-reference的Laravel 5.4的官方文档中找到Facade类参考。这是您要查找的行:
---------------------------------------------------------------
|Facade |Class |Service Container Binding |
---------------------------------------------------------------
|Route |Illuminate\Routing\Router |router |
---------------------------------------------------------------
流程
prefix
方法由__call@Router
处理。 return (new RouteRegistrar($this))->attribute($method, $parameters[0]);
被执行attribute@RouteRegistrar
方法,并将元素'prefix' => 'home'
添加到$this->attributes
数组中attribute@RouteRegistrar
方法返回$this
,因此group@RouteRegistrar
方法被调用group@RouteRegistrar
方法调用group@Router
方法loadRoutes@Router
方法。它将解析闭包中存在的所有路由,即Route::get('/test', ...)
; get
立面下面的类Route
上调用Router
方法。 get@Router
方法已执行addRoute@Router
被调用,依次调用createRoute@Router
方法createRoute@Router
调用带有前缀URI作为第二个参数的newRoute@Router
您会注意到,prefix@Router
方法调用getLastGroupPrefix@Router
显然会检索最后一组的前缀。
答案 2 :(得分:0)
@louisfischer答案不正确。根本没有调用Router::prefix
。
从prefix
调用RouteRegistrar
方法,该方法最终转发到RouteRegistrar::attribute
方法。
您可以通过查看Illuminate\Support\Facades\Route
文档块来验证这一点。
* @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix)
这是完整的流程:
Illuminate\Routing\Router
将呼叫转发到Facade::__callStatic
。Router::prefix
不是public
方法,而是protected
方法,因此此调用通过RouteRegistrar::attribute
方法转发到Router::__call
。prefix($url)
方法将转换为RouteRegistrar::attribute('prefix', $url)