php - 在服务提供者中动态注册多个类
问题描述
我ModuleServiceProvider
在不同的模块文件夹中有多个,我试图在一个中动态注册RootServiceProvider
。
ModuleServiceProvider
public function register()
{
$this->app->bind(CategoryRepositoryInterface::class, CategoryRepository::class);
}
这是我的代码rootServiceProvider
public function boot()
{
foreach(glob(app_path().'/Azam/Modules/*/Providers/*.php') as $provider) {
$this->app->register($provider);
}
}
和我得到的错误
找不到类“/Users/.../Desktop/Developments/Codes/project/app/Azam/Modules/Categories/Providers/CategoryServiceProvider.php”
我的文件路径看起来不错。
解决方案
该register()
方法需要一个完全限定的类名,而不是文件路径。
您可以为服务提供者使用标准位置和命名策略,以便根据模块名称循环它们:
/** @var \Illuminate\Filesystem\Filesystem $filesystem */
$filesystem = $this->app->make('files');
foreach ($files->directories(app_path('Azam/Modules')) as $directory) {
$directoryName = last(explode('/', $directory));
$this->app->register("App\\Azam\\Modules\\{$directoryName}\\{$directoryName}ServiceProvider");
}
或者,如果您想查找整个模块并查找具有任何特定名称的任何服务提供者,您必须在每个文件中查找类并确定是否有任何扩展Illuminate\Support\ServiceProvider
类,或者具有特定的名称后缀(例如ServiceProvider
)。
推荐阅读
- php - 按特定字符串的字母顺序对数组进行排序
- java - 如何转换小数点?
- android - Android广播接收器即使设置也显示权限错误
- ocaml - Ocaml:获取两个字符之间的字符列表
- android - 带有xml的android顶部矩形上的半圆
- laravel - 我想使用 View::share 共享 Auth::user ()
- angular - 在商店中选择激活路线时如何订阅
- c# - C# 中的异常处理,用于处理 powershell 脚本中的错误
- python - 输入 0 与 flatten_15 层不兼容:预期 min_ndim=3,发现 ndim=2
- angularjs - 如何在输入框中将 ng-model 属性传递给 ng-class 中的函数(以设置 CSS 属性)