我需要在vendor / autoload.php和Laravel之前加载Wordpress wp-load.php。
我可以在public/index.php
中进行更新,但是在PHPUnit级别上,vendor/bin/phpunit
在vendor/autoload.php
之前加载wp-load.php
。
是否可以强迫作曲家先加载文件?
我尝试了
{
"autoload" : {
"files" : ["public/wordpress/wp-load.php"]
}
}
但这似乎不起作用,因为作曲家在wordpress之前加载了Laravel ...
我发现的唯一丑陋的修复方法是手动将wp-load加载到vendor / autoload.php文件中,但是我需要在每次作曲家更新时都这样做。
答案 0 :(得分:2)
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的entry point file,您会发现在那里需要自动加载:
/*
|--------------------------------------------------------------------------
| 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
上, 完成其余的自动加载过程设置之后。
答案 1 :(得分:0)
我目前发现的解决方法是在作曲家自动加载转储之后立即应用php脚本(在脚本中,post-autoload-dump)=>它可以解决问题。