【问题标题】:Let a Package use the ServiceProvider of a "master"package in Laravel让一个包使用 Laravel 中“主”包的 ServiceProvider
【发布时间】:2016-07-25 16:09:14
【问题描述】:

我想为 Laravel 开发一些包。所以我想创建一个符合Laravel.com 上的 Laravel-package-development 指南的“主”包。然后我想用其他包扩展这个包(或者让其他开发者扩展它)。

因此,我想让我/他们尽可能轻松。所以我正在寻找一种方法来注册这些子包,而不需要在 config/app.php 中注册它们。

如果这些子包可以通过master-package注册激活就好了,master-package是通过ServiceProvider、ClassAlias和Facade正确注册的。或者有没有办法在 config/app.php 中自动注册?

我在 GitHub caffeinated/modules 上找到了一个包,它提供了类似的东西,但是无法通过 composer 安装和更新新包。

如果你们能帮我解决这个问题,那就太好了,因为我想让扩展主包尽可能简单。

谢谢!

【问题讨论】:

    标签: laravel packages


    【解决方案1】:

    你不需要 caffeinated/modules,Laravel 支持注册模块及其所有开箱即用的组件,所以这个包是不必要的。

    我通常为我的模块做的是 - 我有一个主提供者,它注册其他模块的其他提供者:

    class MainModuleServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->register( FirstModuleServiceProvider::class );
            $this->app->register( SecondModuleServiceProvider::class );
        }
    }
    

    在每个提供者中,我为模块视图、路由等注册提供者:

    class FirstModuleServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->register( RouteServiceProvider::class );
            $this->app->register( ViewServiceProvider::class );
        }
    }
    

    在这些提供程序中,我加载视图、路由并按照 Laravel 文档中的说明发布迁移。

    【讨论】:

    • 感谢您的回答。我稍后会测试它。
    猜你喜欢
    • 2018-04-24
    • 2015-04-24
    • 2017-11-18
    • 2016-07-18
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2013-10-05
    相关资源
    最近更新 更多