Bonjour a tous ,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

 protected function _setConfirmationToken($confirmation_token) {
        return uniqid(60);
    }

Ce que je veux

Je veux générer une chaîne pour le champs confirmation_token.

Ce que j'obtiens

object(App\Model\Entity\User) {

    'username' => 'test',
    'password' => '$2y$10$BH6oeC4ReDb2EXqfj7in3.O4Zn1cMK9SVDNduNQiuQ/Lu1V7WLEIG',
    'email' => 'test@test.com',
    'role' => 'test',
    'avatar' => 'test.jpeg',
    'created' => object(Cake\I18n\FrozenTime) {

        'time' => '2018-06-19T14:15:12+00:00',
        'timezone' => 'UTC',
        'fixedNowTime' => false

    },
    'modified' => object(Cake\I18n\FrozenTime) {

        'time' => '2018-06-19T14:15:12+00:00',
        'timezone' => 'UTC',
        'fixedNowTime' => false

    },
    '[new]' => true,
    '[accessible]' => [
        'username' => true,
        'password' => true,
        'email' => true,
        'role' => true,
        'avatar' => true,
        'confirmation_token' => true,
        'confirmed' => true,
        'created' => true,
        'modified' => true
    ],
    '[dirty]' => [
        'username' => true,
        'password' => true,
        'email' => true,
        'role' => true,
        'avatar' => true,
        'created' => true,
        'modified' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Users'

}

toujours il'ya pas de valeur pour la confirmation_token

merci d'avance ;)

7 réponses


Lartak
Réponse acceptée

Bonjour.
Si tu génères le token de confirmation lors de la création d'un enregistrement, pourquoi est-ce que tu ne le génère pas tout simplement dans le callback beforeSave ?
Par exemple :

public function beforeSave(Event $event, EntityInterface $entity, ArrayObject $options)
{
    if ($entity->isNew()) {
        $entity->confirmation_token = uniqid(60);
    }
}

Pour ce faire, tu dois forcer à utiliser la méthode set

$model->set('confirmation_token', true);

Etant donné que tu dois fournir une valeur, j'ai mis true.

Arbi
Auteur

Bonjour ou je mets ce code.

A l'endroit où tu dois définir ton token de confirmation

Arbi
Auteur

Bonjour a tous

Oui, ca marche si on passe par le beforeSave .
est ce que ca ne marche pas si on ne passe pas par UserTable?

merci

Tu n'es pas obligé de le faire directement dans le fichier du modèle, tu peux très bien modifier la valeur du champ depuis ton controleur, mais pour quelque chose qui n'est censé s'effectuer que lors d'un enregistrement en BDD, personnellement je trouve que c'est plus logique, surtout que ça t'évitera des erreurs inutiles.

Arbi
Auteur

D'accord Merci Lartak pour votre reponse