私は特性に不慣れですが、試してみようと思いました。しかし、ロードされていないようです。
Laravel appディレクトリ:app\HelpersというCheckPermsAgainstObjectTrait.phpの下のフォルダー内にトレイトを作成しました
特性コードは次のとおりです。
<?php
namespace App\Helpers;
trait CheckPermsAgainstObjectTrait {
function something{}
}
私はそれをコントローラーで使用しようとしています:
<?php
namespace App\Http\Controllers;
use this&that;
use App\Helpers\CheckPermsAgainstObjectTrait;
class PolicyController extends Controller{
use CheckPermsAgainstObjectTrait;
}
そのディレクトリ内のクラスは正常にロードされます。 PHPStormは、その特性をうまく認識しています。コンパイルされたaritsanをクリアし、autoloadをダンプしました。 Laravelは名前空間が気に入らないことがあると思いますか?composer -しかし、私が何を台無しにしているのかについてのヒントを与えるためのドキュメントを見つけるのに苦労しています。
エラー:
FatalErrorException in PolicyController.php line 15:
Trait 'App\Helpers\CheckPermsAgainstObjectTrait' not found
何かご意見は?
自動ロードファイルをダンプしましたか?
composer dump-autoload
私にとっての答えは、例としてLaravelトレイトから作業しているため、トレイトファイルの先頭に間違った名前空間がありました。トレイトがApp/Traits/MyTrait.php
にある場合は、名前空間が次のとおりであることを確認してください。
namespace App\Traits;
trait MyTrait
{
// ..
}
次に、特性を含むファイルから:
use App\Traits\MyTrait;
class MyClass
{
use MyTrait;
// ..
}
config/app.php
、composer.json
または自動読み込みをいじる必要はありません。
Laravelプロジェクトを手動で更新し、いくつかの変更を見逃したに違いないため、phpunit
でテストを実行しているときにエラーTrait 'Tests\CreatesApplication' not found in '.../my_project/tests/TestCase.php' on line 9
が発生するという非常によく似た問題がありました。これは、一意の名前空間でトレイトまたはクラスを作成する人にも発生する可能性があります。
とにかく、元の質問に対する@Devonのコメントは、私を正しい方向に向けました。
composer.json
ファイルに必要なオートローダー構成がなかったので、 Laravel)からLaravel(この場合は5.4)のバージョンでどうあるべきかを確認しましたgithubリポジトリ 。
この場合、私はApp\
内の名前空間(すでにcomposer.json
にありました)から呼び出していませんでした。
composer.json
に欠けていたものは次のとおりです。
{
...,
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
...
}
ありがとう デボン !これが他の誰かが髪を抜くのを防ぐことを願っています。