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']);
}
