我正在构建一个PHP包,其中有一个文件夹(比如/vendor/myvendor/packagename/src/Classes
),我想使用PSR-4自动加载它。
但我也想提供一个选项,将该文件夹从其当前位置复制到项目根目录(比如/packagename/Classes
,类似于Laravel的publish
命令)。
那么我该如何进行自动加载呢?
我希望Composer首先查看该文件夹是否存在于应用程序的根目录下,如果存在,则自动加载该文件夹。否则将回退到/vendor
内的默认位置。这可能吗?
FWIW,这是Laravel特定的包,这意味着我可以使用Laravel的publish
命令将整个文件夹复制到任何位置,但随后
- 我必须手动添加新位置以自动加载
- 即使我这样做了,旧位置和新位置之间也会存在名称空间冲突
我希望Composer首先查看该文件夹是否存在于应用程序的根目录下,如果存在,则自动加载。否则,将回退到供应商内部的默认位置。这可能吗?
是的,这是可能的
你需要在包裹的ServiceProvider
上注明所有内容。
有关于如何在文档中发布您的视图、资产的所有信息,它符合您的需求。
看看文档:
https://laravel.com/docs/5.3/packages#public-资产
我在这里为您复制一些示例:
如果你想发布你的翻译,你需要执行以下任务:
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');
$this->publishes([
__DIR__.'/path/to/translations' => resource_path('lang/vendor/courier'),
]);
}
如果您在app's
lang/vendor/courier
中没有翻译,则返回到您的包翻译。
您不需要复制类代码,这些代码可以保留在包目录中。您只能复制您的视图、资产、翻译文件等。
这应该对你有帮助。