Конфигурационные файлы в пакете для общих компонентов в Laravel


Введение

У меня есть огромный проект, который содержит множество проектов Laravel, которые отвечают за разные вещи. Проекты частично используют одну и ту же базу данных (пользователи, разрешения, роли, журналы...), и, например, есть один проект, который используется для обработки пользовательских данных и разрешений для всех других проектов.

Таким образом, в данном случае, например, в проектах были дублированные модели (Пользователь, Разрешение, Роль). Я решил эту проблему, создав независимый пакет, который будет включен в качестве пакета Composer во все проекты, которые используют эти модели.

Проблема

Мой вопрос касается конфигурации необходимых пакетов. Например, теперь я использую пакет разрешений Spatie для обработки разрешений и ролей. Каждый из моих проектов использует одни и те же изменения конфигурации в этих пакетах.

  • Есть ли какой-либо способ обработать эти конфигурации и в моем общем пакете?
  • Может ли один пакет переопределять конфигурационный файл другого?
  • Как Laravel на самом деле справляется с такой ситуацией, когда в необходимых пакетах есть файлы конфигурации с тем же именем?
Author: lingo, 2018-01-01

1 answers

Создание общей службы

Вы можете создать пакет, и все ваши проекты зарегистрируют его как зависимость. Используйте этот пакет для переопределения всех файлов конфигурации зависимостей.

В вашей общей службе вам нужно будет создать поставщика услуг для каждого из поставщиков услуг, которых вы хотите переопределить. Расширьте поставщика услуг вашей зависимости и используйте метод register для загрузки вашего собственного файла конфигурации, а не файла конфигурации вашей зависимости файл.

Например:

class SharedPermissionServiceProvider extends PermissionServiceProvider
{
    public function register()
    {
        if (isNotLumen()) {
            $this->mergeConfigFrom(
                __DIR__.'/../config/permission.php',
                'permission'
            );
        }

        $this->registerBladeExtensions();
    }
}

Если вы используете Laravel 5.5 или выше, вам может потребоваться отказаться от автоматического обнаружения пакетов для каждой из ваших зависимостей, чтобы предотвратить использование поставщиков услуг ваших зависимостей. Вместо этого зарегистрируйте своих поставщиков услуг в своем composer.json.

Если вы используете Laravel 5.4 или ниже, или если вы переопределяете поставщика услуг, который не использует автоматическое обнаружение, удалите поставщиков услуг ваших зависимостей из вашего config/app.php и добавьте свой собственный.

 2
Author: Mathew Tinsley, 2018-01-02 00:14:11