Bonjour,
Voila je rencontre un petit problème avec mon code.
je travaille sur un site ou je dois créer un espace de blog, bon je sai vous aller trouver ça simple ah oui, je l'ai déjà fait dans un projet quelconque avec la version 2.7 de cakephp. apres plusieurs lectures sur cake 3.x j'ai décider de créer tous mes projets sous formes de module d'ou la création d'un module de blog réutulisable dans tous mes projets sous cake. Pour le faire j'ai créer le plugin avec la console cake tout ces bien créer puis dans le App de mon plugin j'ai ceci:
<?php
namespace BlogManager\Controller;
use App\Controller\AppController as BaseController;
use Cake\Event\Event;
class AppController extends BaseController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
$this->loadComponent('Cookie');
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'prefixe' => false
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'index'
],
'unauthorizedRedirect' => [
'controller' => 'Users',
'action' => 'index',
'prefixe' => false
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'index'
]
]);
}
public function isAuthorized($user)
{
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
return false;
}
}
et dans mon controlleur user j'ai ceci
<?php
namespace BlogManager\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
use Cake\Routing\Router;
class UsersController extends AppController
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
$this->loadComponent('RequestHandler');
}
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->Auth->allow(['register', 'logout']);
}
public function beforeRender(\Cake\Event\Event $event)
{
$this->viewBuilder()->theme('BlogManager');
$this->viewBuilder()->layout('template');
}
public function register()
{
$this->loadModel('User');
$objetuser = $this->Users->newEntity(['validate' => 'create']);
if($this->request->is('post'))
{
$this->request->data['role'] = 'invite';
$usersave = $this->Users->newEntity($this->request->data,['validate' => 'create']);
if($this->Users->save($usersave))
{
$this->Flash->success(__("Enregistrement effectué avec success"));
//$user = $this->Auth->identify();
//debug($user);
return $this->redirect($this->referer());
}
$this->Flash->error(__("Impossible de continuer, veuillez recommencer"));
}
$this->set('users',$objetuser);
}
}
lorsque je veux afficher le formulaire register j'ai l'erreur suivante
Fatal error: Call to a member function allow() on boolean in path\to\project\plugins\BlogManager\src\Controller\UsersController.php on line 19
on me dit que j'appele la fonction allow sur un boolean et non un objet et la je suis un peu perdu
quelqu'un a une idée?
Bonsoir.
Ton problème est tout simple.
Tu demandes à ton controller Users de ton plugin d'étendre de AppController de l'application, sauf que la configuration du composant Auth tu l'as fait dans l'AppController de ton plugin, il est donc normal que le controller Users ne bénéficie pas de l'initialisation et de la configuration du composant.
Il faut que ton controller Users de ton plugin étende de l'AppController de ton plugin, soit :
namespace BlogManager\Controller;
use Cake\Event\Event;
use Cake\Routing\Router;
class UsersController extends AppController
De cette manière il étendra bien de l'AppController de ton plugin y bénéficiera de l'initialisation et de la cconfiguration du composant Auth.
je viens de faire un constat quand je configure le composant dans le AppController principale cela fonctionne bien,
la je peut déduire que le composant Auth ne peut être configurer dans un plugin?