在制作Laravel包时,如何注册服务提供者和依赖包的别名?

 日光覃城_751 发布于 2023-01-29 12:00

我正在为Laravel创建一个包,我已经将Notification包(https://github.com/edvinaskrucas/notification)定义为我的包的依赖项.

在/workbench/vendor/package/src/composer.json我有:

"require": {
    "php": ">=5.3.0",
    "illuminate/support": "4.1.*",
    "edvinaskrucas/notification": "2.*"
}

然后我在我的包的服务提供者的注册方法中注册服务提供者(甚至不确定这是否是正确的方法),以及使用App :: alias的别名.

所以在/workbench/vendor/package/src/Vendor/Package/PackageServiceProvider.php我有:

public function register()
{
    App::register('Krucas\Notification\NotificationServiceProvider');
    App::alias('Notification','Krucas\Notification\Facades\Notification');
}

但是在尝试在控制器中使用Notification :: info()或在视图中使用Notification :: showAll()时,我仍然会收到"Class'Notification'not found'异常.

如何正确注册服务提供程序以获取程序包的依赖项?

2 个回答
  • 我有同样的问题.我在一个包中有一个依赖项,并且不想用这些依赖项来打扰用户,因为它是依赖项中的依赖项.所以这就是解决方案.希望它能帮到你!

    public function register()
    {
        /*
         * Register the service provider for the dependency.
         */
        $this->app->register('LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider');
        /*
         * Create aliases for the dependency.
         */
        $loader = \Illuminate\Foundation\AliasLoader::getInstance();
        $loader->alias('AuthorizationServer', 'LucaDegasperi\OAuth2Server\Facades\AuthorizationServerFacade');
        $loader->alias('ResourceServer', 'LucaDegasperi\OAuth2Server\Facades\ResourceServerFacade');
    }
    

    2023-01-29 12:02 回答
  • 您可以在应用程序上使用alias()方法来注册别名,但我会考虑让您的包用户在安装过程中自己注册别名和服务提供者.这是一种跟踪您正在使用的外部代码的好方法,也是一种将组件拉出来测试的好方法.

    个人意见当然.:)

    Dayle

    2023-01-29 12:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有