我正在使用Laravel 5应用程序,现在应该在多个laravel 5应用程序中重复使用该应用程序的代码,这就是为什么我要创建一个composer程序包,然后将其安装在任意数量的laravel中的原因5个应用程序具有相同的功能并也在其之上构建。
我是作曲家软件包开发的新手,尤其是使用Service Providers将软件包挂接到Laravel 5中。到目前为止,我了解到,如果我使用以下服务提供商,则可以使用laravel 5应用程序中的路由:
<?php
namespace Uppdragshuset\AO\Tenant;
use Illuminate\Support\ServiceProvider;
class TenantServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
include __DIR__.'/routes.php';
}
}
现在,要使此工作正常进行,我只需要通过composer将软件包打包到任何全新的Laravel 5安装中,然后只需使用以下命令更新提供者的阵列app.php
:
Uppdragshuset\AO\Tenant\TenantServiceProvider::class
这对我来说很有意义,也可以工作。但是现在我正在开发的软件包也具有自己的依赖性,并且其中许多依赖性软件包还包含laravel 5服务提供商,因此我必须手动将所有软件包包括在laravel5安装中以使其正常工作。
但是我猜测必须有一种方法可以以某种方式在自己创建的程序包中注册这些依赖的服务提供程序,因此我只需要注册我上面提到的一个提供程序即可。问题是我不知道该怎么做,在任何地方都找不到类似的参考文献。如何从作曲家程序包本身注册多个服务提供商?
因此,我终于想出了如何从composer软件包本身中注册依赖服务提供者的方法。
我的TenantServiceProvider
包中有main ,应该将路由挂接到主应用程序中,并且还负责发布迁移,配置等。
事实证明,我可以使用外观register()
上的方法通过同一提供者注册任何依赖的服务提供者,App
并在我的main的register方法中调用它,TenantServiceProvider
如下所示:
public function register()
{
include __DIR__.'/routes.php';
App::register(RepositoryServiceProvider::class);
App::register(\Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class);
}
这样,我只需要TenantServiceProvider
在laravel应用程序的app.php配置文件中的提供程序数组中注册即可。当调用它并调用其上的register方法时,所有其他提供程序都将通过App::register()
调用进行注册。希望这对某人有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句