Загрузчик псевдонимов Laravel не находит класс - PullRequest
1 голос
/ 31 января 2020

У нас есть устаревший проект, который мы не можем обновить, и нам нужно внести некоторые изменения в symfony Response.php в поставщике. Мы решили эту проблему, скопировав Response.php в отдельную папку и используя псевдоним для загрузки этого нового класса вместо вендора. Мы сделали это в AppServiceProvider:

public function boot()
    {
        AliasLoader::getInstance()->alias('Symfony\Component\HttpFoundation\Response', 'App\Overrides\Response');
...

public function provides()
    {
        return ['Symfony\Component\HttpFoundation\Response'];

Это работало нормально, пока мы не начали работу, и внезапно оно перестало работать. Хотя он все еще отлично работает на наших dev серверах. Мы ясно видим, что загружается оригинальный класс от vendor вместо класса Overrides, поэтому по какой-то причине псевдоним не работает. Кто-нибудь знает, что может быть причиной этого? Даже не знаю, с чего начать или какие настройки или команды ремесленников могли вызвать такое поведение.

Обновление: После дальнейшего исследования кажется, что оптимизм кустарного промысла является виновником. На наших серверах разработки класс Response обслуживается из папки Overrides, а на производстве - из оптимизированного. php кэша. Даже при том, что оба сервера работают, оптимизируют.

1 Ответ

0 голосов
/ 31 января 2020

У меня была похожая проблема с моим laravel сайтом. Чтобы исправить это, в мои composer. json файлы, в разделе сценариев я добавляю следующие команды:

    "scripts": {
        "pre-install-cmd": [
            "@php -r \"unlink('bootstrap/cache/services.php');\"",
            "@php -r \"unlink('bootstrap/cache/config.php');\""
        ],
        "pre-autoload-dump": [
            "@php -r \"array_map('unlink', glob('bootstrap/cache/*'));\""
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ],
    }

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

...