Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用;名称空间;Laravel包中RouteServiceProvider中的方法_Laravel_Routes - Fatal编程技术网

使用;名称空间;Laravel包中RouteServiceProvider中的方法

使用;名称空间;Laravel包中RouteServiceProvider中的方法,laravel,routes,Laravel,Routes,我正在创建一个laravel软件包,并在/packages/mycompany/mypackage进行此设置 我想使用RouteServiceProvider注册一些路由,并专门传入一个名称空间,这样在使用此文件时就不必完全限定我的控制器 我理解,要从包中加载路由,我应该在我的主服务提供商的引导方法中使用loadRoutesFrom: public function boot() { $this->loadRoutesFrom(__DIR__.'/../../routes/api.

我正在创建一个laravel软件包,并在/packages/mycompany/mypackage进行此设置

我想使用RouteServiceProvider注册一些路由,并专门传入一个名称空间,这样在使用此文件时就不必完全限定我的控制器

我理解,要从包中加载路由,我应该在我的主服务提供商的引导方法中使用
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'..)