如何在composer和/vendor/autoload.php之前加载文件?

时间:2019-03-22 09:09:25

标签: php wordpress laravel composer-php phpunit

我需要在vendor / autoload.php和Laravel之前加载Wordpress wp-load.php。

我可以在public/index.php中进行更新,但是在PHPUnit级别上,vendor/bin/phpunitvendor/autoload.php之前加载wp-load.php

是否可以强迫作曲家先加载文件?

我尝试了

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

但这似乎不起作用,因为作曲家在wordpress之前加载了Laravel ...

我发现的唯一丑陋的修复方法是手动将wp-load加载到vendor / autoload.php文件中,但是我需要在每次作曲家更新时都这样做。

2 个答案:

答案 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';

如果要在自动加载之前 加载其他文件,只需在该点之前添加适当的requireinclude语句即可。

例如:

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)=>它可以解决问题。