PHP
CakePHP3
コントローラーごとに、認証なしにアクセスできるメソッドを、許可しておくのに下記のようにやると思いますが、
//AppController内 $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Offers', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'add', 'home' ] ]);
//個別のController内 public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['cancelFromSp']); }
次のようなエラーが出ちゃうことがあります。
Strict (2048): Declaration of App\Controller\MoresController::beforeFilter() should be compatible with App\Controller\AppController::beforeFilter(Cake\Event\Event $event) [APP/Controller\MoresController.php, line 12]
Warning (4096): Argument 1 passed to App\Controller\MoresController::beforeFilter() must be an instance of App\Controller\Event, instance of Cake\Event\Event given, called in C:\xampp2\htdocs\cake\vendor\cakephp\cakephp\src\Event\EventManager.php on line 386 and defined [APP/Controller\MoresController.php, line 30]
あれれれー、なんか変数の設定の仕方がおかしかったかな??
とか思っちゃいますが、原因は簡単なことで、
use Cake\Event\Event;
が抜けてるとこうなっちゃうんですねー。
コントローラーの最初に、上記のEventをuseするように追加します。
<?php namespace App\Controller; use App\Controller\AppController; use Cake\Event\Event; class MoresController extends AppController { public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['cancelFromSp']); }