Salut,
Je suis entrain de suivre le tuto sur les ACL du cookbook 2.x (je suis bien CakePhp 2) et je rencontre un plantage à cause des aros (Acts as a Requester dans le cookbook). Je suis sous db postgresql et j'ai déjà créé d'autres MVC pour mon site (mais j'ai un problème sur les ACL là ^^).
Lien du cookbook
Lorsque j'arrive à l'étape de créer/initialiser mes "Db Acl tables" : ./Console/cake schema create DbAcl -> aucuns soucis, tables crées correctement.
Dans le point suivant, à "Acts as a Requester" :
-
je copie dans mon modèle User
public $belongsTo = array('Group');
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
if (!$this->id && empty($this->data)) {
return null;
}
if (isset($this->data'User']'group_id'])) {
$groupId = $this->data'User']'group_id'];
} else {
$groupId = $this->field('group_id');
}
if (!$groupId) {
return null;
} else {
return array('Group' => array('id' => $groupId));
}
}
-
je copie dans mon modèle Group
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
return null;
}
Dans le cookbook, ils disent de se rendre à /users/add et /groups/add et d'ajouter des groups et users. Quand je me rend maintenant à ces adresses là j'obtiens ce type d'erreurs :
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Notice (8): Undefined property: CakeErrorController::$uses [CORE\Cake\Controller\Controller.php, line 362]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Notice (8): Undefined property: CakeErrorController::$modelClass [CORE\Cake\Controller\Controller.php, line 371]
Catchable fatal error: Argument 1 passed to View::__construct() must be an instance of Controller, instance of View given, called in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\stock_01\lib\Cake\Controller\Controller.php on line 941 and defined in C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\apache\www\stock_01\lib\Cake\View\View.php on line 308
/groups/add fonctionne par contre, ajoute bien des groupes en db et dans la table aros. j'obtiens le même type d'eerreur quand je veux l'editer...
Si je retire le ode ci-dessus du modèle User, j'accède bien à mes pages (/users/add, users/view, etc.). C'est pour celà que j'ai l'impression que le problème vient du modèle user avec l'association au modèle Group.
Je vous remercie d'avance en espérant résoudre ce problème, MERCI.
Je vous copie les sources au cas où^^
Models :
User.php
App::uses('AppModel', 'Model', 'AuthComponent', 'Controller/Component');
class User extends AppModel {
public $belongsTo = array('Group');
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
if (!$this->id && empty($this->data)) {
return null;
}
if (isset($this->data'User']'group_id'])) {
$groupId = $this->data'User']'group_id'];
} else {
$groupId = $this->field('group_id');
}
if (!$groupId) {
return null;
} else {
return array('Group' => array('id' => $groupId));
}
}
public function beforeSave($options = array()) {
$this->data'User']'password'] = AuthComponent::password($this->data'User']'password']);
return true;
}
// public $validate{...} généré par console
public $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
]
Group.php
App::uses('AppModel', 'Model');
class Group extends AppModel {
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
return null;
}
// public $validate{...} généré par console
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'group_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
}
Controllers :
AppController.php
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session'
);
public $helpers = array('Html', 'Form', 'Session');
public function beforeFilter() {
//Configuration AuthComponent
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
}
}
UsersController.php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
}
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Your username or password was incorrect.');
}
}
}
public function logout() {
//encore rien dedans
}
//add,edit,etc. généré par via la console
}
GroupsController.php
App::uses('AppController', 'Controller');
class GroupsController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
}
//view,edit,etc. généré par la console
}
Je copie/colle pas les vues vu que je ne pense pas que ça vienne de là.