使用;名称空间;Laravel包中RouteServiceProvider中的方法
我正在创建一个laravel软件包,并在/packages/mycompany/mypackage进行此设置 我想使用RouteServiceProvider注册一些路由,并专门传入一个名称空间,这样在使用此文件时就不必完全限定我的控制器 我理解,要从包中加载路由,我应该在我的主服务提供商的引导方法中使用使用;名称空间;Laravel包中RouteServiceProvider中的方法,laravel,routes,Laravel,Routes,我正在创建一个laravel软件包,并在/packages/mycompany/mypackage进行此设置 我想使用RouteServiceProvider注册一些路由,并专门传入一个名称空间,这样在使用此文件时就不必完全限定我的控制器 我理解,要从包中加载路由,我应该在我的主服务提供商的引导方法中使用loadRoutesFrom: public function boot() { $this->loadRoutesFrom(__DIR__.'/../../routes/api.
loadRoutesFrom
:
public function boot()
{
$this->loadRoutesFrom(__DIR__.'/../../routes/api.php');
}
public function register()
{
$this->app->register(\MyCompany\MyPackage\Providers\RouteServiceProvider::class);
}
这很好,我可以使用那里定义的路由,但是我必须完全命名我的控制器。理想情况下,我希望能够在不使用名称空间的情况下调用它们(而不是将它们包装在名称空间中
)——这与Laravel应用程序的路由工作方式非常相似(我使用的是一个包)
我看到\App\Providers\RouteServiceProvider
中的“namespace”方法可以定义要在给定路由文件中使用的名称空间,因此一直使用我自己的RouteServiceProvider和以下方法:
public function map()
{
Route::domain('api'.env('APP_URL'))
->middleware('api')
->namespace($this->namespace)
->group(__DIR__.'/../../routes/api.php');
}
(顺便提一下,如果我在这里使用map
方法,上面的loadRoutesFrom
调用是否必要?)
我的路线服务提供商通过主服务提供商注册:
public function register()
{
$this->app->register(\MyCompany\MyPackage\Providers\RouteServiceProvider::class);
}
然而,当我访问我的应用程序时,我收到一个投诉,说我的控制器不存在——这可以通过在routes/api.php
中正确命名我的控制器来解决,这正是我想要避免的
Route::get('/somepath', 'MyController@show');
我如何利用
名称空间
,从而不必完全限定我的控制器 LoadRoutes From
是一个帮助程序,在注册路由之前检查路由是否已缓存
您可以开始定义一组路由,然后在提供商的boot
方法中调用该组中的loadroutes from
:
Route::group([
'domain' => 'api'. config('app.url'), // don't call `env` outside of configs
'namespace' => $this->namespace,
'middleware' => 'api',
], function () {
$this->loadRoutesFrom(__DIR__.'/../../routes/api.php');
});
或者,如果您更喜欢设置属性的方法样式:
Route::domain('api'. config('app.url'))
->namespace($this->namespace)
->middleware('api')
->group(function () {
$this->loadRoutesFrom(__DIR__.'/../../routes/api.php');
});
Laravel出纳就是这样做的:
谢谢!当我需要将
domain('api'..)
修改为domain('api'..)