CakePHP 4 で Bake 時に Authorization の InvalidArgumentException エラーが出た時の対応方法
CakePHP 4.4 で下記のように、コントローラのテストを Bake しようとしたところ Authorization 関連のエラーが発生しました。
- CakePHP
- 4.4.16
- Authorization
- 2.3.0
$ bin/cake bake test Controller Drinks --prefix Shop
Bake is detecting possible fixtures...
2023-08-31 00:00:00 error: [InvalidArgumentException] Expected that `authorization` would be an instance of Authorization\AuthorizationServiceInterface, but got NULL in /var/www/html/vendor/cakephp/authorization/src/Controller/Component/AuthorizationComponent.php on line 238
Stack Trace:
...
[InvalidArgumentException] Expected that `authorization` would be an instance of Authorization\AuthorizationServiceInterface, but got NULL in /var/www/html/vendor/cakephp/authorization/src/Controller/Component/AuthorizationComponent.php on line 238
Stack Trace:
...
調べてみると DrinksController の initialize() に書いた
Authorization コンポーネントを使った処理が原因のようで、
下記のように beforeFilter() に移動したら無事 Bake ができました。
/src/Controller/Shop/DrinksController.php
public function beforeFilter(EventInterface $event)
{
$this->Authorization->skipAuthorization();
}
- Controller Callback Methods (Controllers - 4.x)
- https://book.cakephp.org/4/en/controllers.html#controller-callback-methods
この対応で今のところ問題は出ていませんが、
正しい対応方法かは不明です。
また今回の例では prefix をつけていますが、簡単な調査をした結果では
prefix の有無は無関係と思われます。