3 votes

Did you mean "CakePHP tutorial ACL group_id"?

Je suis en train de suivre le tutoriel et je suis à la partie où vous ajoutez les groupes et les comptes d'utilisateurs...

Cependant, lorsque j'essaie d'ajouter un nouvel utilisateur, le menu déroulant pour le groupe est vide... Qu'est-ce qui pourrait être incorrect ?

Voici à quoi ressemble le modèle User.php

 array('type' => 'requester'));

    public function beforeSave() {
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
        return true;
    }   
    public function bindNode($user) {
            return array('model' => 'Group', 'foreign_key' => $user['User']['group_id']);
    }   

    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 $belongsTo = array(
        'Group' => array(
            'className' => 'Group',
            'foreignKey' => 'group_id',
            'conditions' => '', 
            'fields' => '', 
            'order' => ''
            )   
        );  

    public $hasMany = array(
            'Image' => array(
                'className' => 'Image',
                'foreignKey' => 'user_id',
                'dependent' => false,
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'exclusive' => '',
                'finderQuery' => '',
                'counterQuery' => ''
                )
            );

}

Voici à quoi ressemble le modèle Group.php

 array('type' => 'requester'));

    public function parentNode() {
        return null;
    }   
    public $hasMany = array(
            'User' => array(
                'className' => 'User',
                'foreignKey' => 'group_id',
           'dependent' => false,
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'exclusive' => '',
                'finderQuery' => '',
                'counterQuery' => ''
                )
            );

}

Mes tables ressemblent à ceci table 'users'

>     > Champ   Type    Null    Clé Valeur par défaut Extra
>     > id  int(11) NON PRI NULL    auto_increment
>     > username    varchar(64) NON UNI NULL      password  varchar(82) NON      NULL     
>     > first_name  varchar(64) NON      NULL      last_name varchar(64) NON      NULL     
>     > créé datetime    OUI     NULL      group_id  int(11) NON      NULL

table 'groups'

Champ   Type    Null    Clé Valeur par défaut Extra
id  int(11) NON PRI NULL    auto_increment
name    varchar(100)    NON      NULL     
created datetime    OUI     NULL     
modified    datetime    OUI     NULL     

Code de la vue View/Users/add.ctp

Form->create('User');?>

    Form->input('username');
        echo $this->Form->input('password');
        echo $this->Form->input('first_name');
        echo $this->Form->input('last_name');
        echo $this->Form->input('group_id');
    ?>  

Form->end(__('Soumettre'));?>

        Html->link(__('Liste des utilisateurs'), array('action' => 'index'));?>
        Html->link(__('Liste des groupes'), array('controller' => 'groups', 'action' => 'index')); ?> 
        Html->link(__('Nouveau groupe'), array('controller' => 'groups', 'action' => 'add')); ?> 
        Html->link(__('Liste des images'), array('controller' => 'images', 'action' => 'index')); ?> 
        Html->link(__('Nouvelle image'), array('controller' => 'images', 'action' => 'add')); ?> 

J'ai créé 2 groupes. Un est "visiteurs" et un est "admin".. voici à quoi ressemble la table aros actuellement

id  parent_id   model   foreign_key alias   lft rght
        2   NULL    Group   4       1   2
        3   NULL    Group   5       3   4

3voto

Saanch Points 1124

Avez-vous ajouté le groupe d'abord? D'abord, vous devez ajouter le groupe puis essayer d'ajouter l'utilisateur.

Veuillez vérifier si vous avez une relation belongsTo configurée dans le modèle utilisateur User.php

public $belongsTo = array(
    'Group' => array(
        'className' => 'Group',
        'foreignKey' => 'group_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

Vérifiez si la méthode d'ajout de votre UserController contient le code suivant
Veuillez vérifier la partie $groups = $this->User->Group->find('list'); $this->set(compact('groups'));

    public function add() {
    if ($this->request->is('post')) {
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('L'utilisateur a été enregistré'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('L'utilisateur n'a pas pu être enregistré. Veuillez réessayer.'));
        }
    }
    $groups = $this->User->Group->find('list');
    $this->set(compact('groups'));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X