laravel правильный способ расширить (развернуть) / переопределить файл пакета конкретного поставщика - PullRequest
1 голос
/ 25 сентября 2019

в проекте, который я задействовал, есть composer require fengqi/hanzi в папке vendor, которая используется для преобразования упрощенного китайского и традиционного китайского языка

Для людей, которые хотят взглянуть на пакет https://github.com/fengqi/hanzi

Внутри папки vendor пакет имеет следующую примерную структуру каталогов:

vendor/
--hanzi/
----src/
------Hanzi.php
------HanziDict.php
------Pinyin.php

Конкретный файл HanziDict.php Я хочу изменить, имеет действительно простую структуру кода:

<?php namespace fengqi\Hanzi;
  return array (
      '啊' => '啊',
       ...
       ...
       'sample char A'=>'sample char B'
 );

В github-репозитории пакета было предложено, что я могу вставить любой "char C => char D" в php-файл, если я обнаружил, что определенные символы отсутствуют в словаре.

Но я считаю, что не следует напрямую помещать код в папку vendor, поскольку он будет переопределен после обновления.Итак, моя проблема в том, как правильно переопределить / расширить этот файл в Laravel (например, вставить «char C => char D» в массив).

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

В идеале я хочу добиться чего-то вроде: вне папки vendor у меня есть расширенный ExtraHanziDict.php .Поэтому он всегда может опираться на поставщика dict.php.

Следующие ссылки - это код класса вендора (только меньше простых функций для чтения символов dict и convert) https://github.com/fengqi/hanzi/blob/master/src/Hanzi.php (извинения за бросание кода)

1 Ответ

0 голосов
/ 25 сентября 2019

К сожалению, в этом случае нет простого способа изменить словарь.Как вы правильно догадались, вы никогда не должны изменять содержимое папки поставщика, так как она не предназначена для контроля версий.В вашем конкретном случае вы можете сделать следующее:

  1. Попросите менеджера хранилища добавить API, который позволяет добавлять новые словари во время выполнения.
  2. Разверните хранилище, измените то, что вынужно и используйте это вместо этого (см. загрузка собственного репозитория git с помощью composer ).Если вы считаете, что ваши изменения могут быть полезны для других, откройте запрос Pull в исходном репозитории.
  3. В хранилище, которое вы связали, нет большой логики.Каждый пакет, который вы добавляете в свой файл composer.json, представляет собой бремя, код, который вам не принадлежит, и вы ДОЛЖНЫ слепо засовывать (что если в какой-то момент репозиторий взломан, а в него спрятан вредоносный код?).Просто создайте свой собственный сервис для выполнения такой простой задачи.
...