Как загрузить файл перед composer и /vendor/autoload.php? - PullRequest
1 голос
/ 22 марта 2019

Мне нужно загрузить WordPress wp-load.php до вендора / autoload.php и Laravel.

Я могу обновить в public/index.php, но на уровне PHPUnit vendor/bin/phpunit загружает vendor/autoload.php до wp-load.php.

Можно ли заставить компоновщик загрузить файл раньше всего?

Я пытался

{
    "autoload" : {
         "files" : ["public/wordpress/wp-load.php"]
    }
}

Но, похоже, он не работает, так как композитор загружает Laravel перед WordPress ...

Единственное уродливое исправление, которое я нашел, - это ручная загрузка wp-load в файл vendor / autoload.php, но мне нужно это делать при каждом обновлении композитора.

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Composer не несет ответственности за загрузку autoload.php, но какой бы фреймворк вы ни использовали. PHPUnit, в вашем случае.

PHPUnit загружает только vendor/autoload.php, поскольку этот файл загружается в конфигурации phpunit.xml.

Гораздо проще, чем делать какие-либо странные инъекции во время запуска композитора, - просто создать свой собственный файл начальной загрузки тестирования.

Если вы отметите phpunit.xml, вы найдете объявление начальной загрузки, которое по умолчанию загружает vendor/autoload.php:

<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
stopOnFailure="false">

Создайте новый файл начальной загрузки (например, testing_bootstrap.php) и включите в него все необходимые файлы в дополнение к vendor/autoload.php:

<?php
// testing_bootstrap.php

require 'path/to/wordpress/wp-load.php';
require 'vendor/autoload.php`;

И измените ваш файл phpunit.xml, чтобы он использовал этот файл для начальной загрузки ваших тестов.

bootstrap="testing_bootstrap.php"

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


Чтобы выполнить то же самое во время обычного запуска Laravel, вам нужно изменить файл точки входа Laravel , там вы найдете, что там требуется автозагрузка:

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/
require __DIR__.'/../vendor/autoload.php';

Если вы хотите загрузить другой файл до автозагрузки, просто добавьте соответствующий оператор require или include до этой точки.

например:.

require 'path/to/wordpress/wp-load.php';
require __DIR__.'/../vendor/autoload.php';

Использование files клавиши композитора просто не будет работать . Эти файлы загружаются в файл vendor/composer/autoload_files.php, а он, в свою очередь, загружается в vendor/composer/autoload_real.php::getLoader, после после завершения настройки процесса автозагрузки.


0 голосов
/ 25 марта 2019

Исправление, которое я нашел на данный момент, заключается в применении php-скрипта сразу после дампа автозагрузки композитора (в скриптах post-autoload-dump) => он делает свое дело.

...