読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

Behaviorの名前空間を変更しようとしたら、できませんでした。

CakePHP CakePHP3.x PHP

スポンサードリンク

Controllerも階層深くできるし、いけるっしょと考えていました。

試す

とあるTableクラス

<?php
// ...
  $this->addBehavior('Register', [
      'className' => 'App\Model\Behavior\Users\Register'
  ]);
// ...

ディレクトリとnamespaceを変更したBehavior

<?php
namespace App\Model\Behavior\Users; // <- ①
// ...
class RegisterBehavior extends Behavior
{
  // ...

これでいけると思った。

しかし、色々不具合が。

PHPStormで開発していますが、①のnamespaceのところを定義すると、Declaration of referenced constant is not found in built-in library and project files. ていうエラーが波線が表示されます。

よくわかりませんが、補完で定義すると、治りました。イミフ。

また、動作でもエラーが発生しました。

Missing Behavior

わかりやすいですね。見つからない。なんでや!

色々コアのソースを覗いてみたけど、namespaceをパスとして認識しないようになっているので、ロードするディレクトリを増やさないとダメなんだろうけど、よくわからん。

つーか、ドキュメントに明記されていた

https://book.cakephp.org/3.0/ja/orm/behaviors.html

ビヘイビアクラスは App\Model\Behavior 名前空間または MyPlugin\Model\Behavior 名前空間に存在する必要がある。

( ゚д゚)・・・

なるほど。

おわり