私はここで提供されているアドバイスに従って、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
をオーバーライドする方法がわかりません。
これは、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の前にヘルパーを注入する方法があれば、これで問題を解決できます。
私はこのことをデバッグするのが大好きで、頭の中でこの小さな歌「これらのきちんとした静的ヘルパーを持っているなんて素晴らしいアイデア」を聞いています。
質問の編集を読むと、自動ロードでのファイルの挿入が機能しないことがわかります。
https://packagist.org/packages/funkjedi/composer-include-filesはこれを解決するためにここにあります。
ファーストラン:
composer require funkjedi/composer-include-files
次に、composer.json
extra
フィールドを更新します。
"extra": {
"include_files": [
"app/Http/helpers.php"
]
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加