При создании пакета Laravel, как мне зарегистрировать поставщика услуг и псевдоним пакетов зависимостей?

Я создаю пакет для 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::.

Итак, в /workbench/vendor/package/src/Vendor/Package/PackageServiceProvider.php У меня есть:

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

Но я все еще получаю исключение "Class" Notification "not found" при попытке использовать Notification:: info() в контроллере или Notification:: showAll() в представлении.

Как правильно зарегистрировать поставщиков услуг для моих зависимостей пакетов?

Ответ 1

У меня была та же проблема. У меня была зависимость в пакете и я не хотел беспокоить пользователя этими зависимостями, поскольку это зависело от зависимости. Итак, это решение. Надеюсь, это поможет вам!

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');
}

Ответ 2

Вы можете использовать метод alias() в приложении для регистрации псевдонима, но я бы подумал о том, чтобы пользователи пакетов регистрировали псевдонимы и поставщиков услуг сами в процессе установки. Это хороший способ отслеживать внешний код, который вы используете, и хороший способ вытащить компоненты для тестирования.

Личное мнение конечно.:)

Дэйл