我一直在遵循此处提供的建议,以覆盖我的route
,创建自己的helpers.php
并将其加载到引导程序中。它在浏览器中工作正常,但在phpunit中效果不佳:
PHP Fatal error: Cannot redeclare route() (previously declared in /var/www/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:707) in /var/www/app/Http/helpers.php on line 25
Phpunit似乎在调用供应商自动加载,而不是phpunit.xml
中设置的bootstrap,我不知道该如何覆盖。
这是我在Laravel的helpers.php
#0 /var/www/vendor/composer/autoload_real.php(66): require()
#1 /var/www/vendor/composer/autoload_real.php(56): composerRequirefaa86f5c74caea0c3ebf4fa6247e01ed('f0906e6318348a7...', '/var/www/vendor...')
#2 /var/www/vendor/autoload.php(7): ComposerAutoloaderInitfaa86f5c74caea0c3ebf4fa6247e01ed::getLoader()
#3 /var/www/vendor/phpunit/phpunit/phpunit(51): require('/var/www/vendor...')
#4 {main}
thrown in /var/www/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 699
只有我无法控制的元素。
编辑
我在composer.json
中进行了一些编辑,以加载我的助手。现在它生成vendor/composer/autoload_files.php
:
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
// ...
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
'224ac75459a4044275cfdffe33336135' => $baseDir . '/app/Http/helpers.php',
);
基本上,如果我有办法在Laravel的帮助之前注入帮助。
我真的很喜欢调试这件事,并在我脑海中听到这首小歌曲"拥有那些整洁的静态助手的好主意",这是Groooooovy。
如果您读取问题的 edit ,您将了解将文件注入自动加载不起作用。
https://packagist.org/packages/funkjedi/composer-include-files在这里解决此问题。
第一次运行:
composer require funkjedi/composer-include-files
然后更新您的composer.json
extra
字段:
"extra": {
"include_files": [
"app/Http/helpers.php"
]
}