Bonjour,

Comment puis-je définir le modèle soit la validation à utiliser lorsque j'envoie mes données récolté par des formulaires? Car dans mon cas j'ai la connexion qui est définis sur le modèle de base ainsi que la connexion avec facebook. Mais je souhaiterais appeler un modèle différents pour l’inscription.

J'ai essayé, la fonction "loadmodel()" mais il m'appel toujours celui correspondant à mon contrôleur. Je ne trouve pas dans la doc, s'il est possible de passé en paramètre le choix du modèle lorsque l'on fait un "$this->User->save".

Merci :)

10 réponses


Grafikart
Réponse acceptée

Si tu fais $this->User->save c'est User qui est utilisé, si tu veux utilisé un autre model tu met $this->TONMODEL->save

boyboywow
Auteur
Réponse acceptée

J'ai réussi :D

J'explique pour ceux qui se retrouveront dans la même situation :)

Dans mon model je lui indique de ne pas utiliser de table soit: var $useTable = false;

Ensuite dans mon Formulaire, au moment de la création, il faut préciser le model soit: <?php echo $this->Form->create('Signup'); ?>

Voilà, 2-3h à fouiller dans le doc CakePHP :D

Merci à Graphikart et extrarox !

J'ai bien essayer de faire ceci et j'ai bien un model "Signup.php", mais lorsque je confirme mon formulaire j'obtient " Fatal error: Call to a member function save() on a non-object in app\Controller\UsersController.php on line 111" :O

La fonction signup dans UserController.php

function signup(){

        if($this->request->is('post')){ // Si les donnée son postéS
            $d = $this->request->data;
            $d'User']'id'] = null;// force l'attribut ID a null
            if($this->Signup->save($d,true,array('username','password','mail'))){

            }else{
            }
        }
    }

Mon model Signup.php

<?php
class Signup extends AppModel{
    public $validate = array(
        // Verifie que l'utilisateur entre un mot de passe et qu'il n'existe pas
        'username' => array(
            'rule' => 'isUnique',
            'allowEmpty' => false,
            'required' => true,
            'message' => "Votre pseudo n'est pas valide"
        ),
        'password' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'message' => "Vous devez entrer un mot de passe"
        ),
        'mail' => array(
            'rule' => 'email',
            'required' => true,
            'allowEmpty'=> false,
            'message' => "Vous ne pouvez pas entrer de mot de passe"
        ),
        array(
            'rule' => 'isUnique',
            'message'=> "Vous devez entrer un mot de passe",
            'allowEmpty'=> false
        )
    );
}

En gros je voudrais, pouvoir faire des vérifications différentes pour de chacun de mes formulaires de mon UserController.php, qui comporte toujours le champs password et qui une fois doit être en required et une fois non... Et donc pouvoir modifier les messages d'erreur etc.. :/

J'ai exactement le même code que dans les tuto, et j'en suis à l'inscription des membres.

Pour le moment toutes mes vérifications se font dans le model "User.php" et donc il y a forcement un formulaire qui bloque..

Si quelqu'un a une solution à me proposer, ou bien Graphikart si tu peux m’éclairer sur mon erreur :( Merci !

Salut,

Essaye de mettre :

$this->loadModel("Signup");

au tout début de ta méthode.

Merci mais le problème maintenant c'est qu'il me demande de créer une table "signups", alors que je voudrais sauver mes données dans la table "users".

Le message: Missing Database Table
Error: Database table signups for model Signup was not found.

J'ai essayer de valider mes données puis de les envoyer, comme indiquer dans la doc, mais il me demande quand même cette table...

$d = $this->request->data;
            $d'User']'id'] = null;// force l'attribut ID a null
            $this->loadModel("Signup");
            $this->Signup->set($d);
            if($this->Signup->validates(array('fieldList'=> array('username','mail','password')))){
                if($this->User->save($d,false)){
                    die("c'est bon");
                }else{
                    die('Erreur save');
                }
            }else{
                die('Problème de validation');
            }

Pourquoi tu as créé un model Signup si tu as pas de table??

Salut a tous Boyboywow très intéressant, je cherche a valider mon formulaire de signup différemment suivant que mon user s inscrive en tant que particulier ou professionnel, pour par exemple rendre l'adresse obligatoire dans un cas mais pas dans l'autre pense tu que cette méthode serais la solution?

Moi j'avais essayer de créer deux controllers et deux modeles liés a la même table avec donc des règles de validation différente dans mes deux modeles.

Mais j ai quelque souci...

Salut bibi63000,

Tu peux utiliser ma solution, tu crées plusieurs modèles, en fonction du type d'inscription tu appel le bon modèle grâce auquel tu valides les données et si c'est bon tu sauvegarde tes données.

Tu utilises ces modèles sans base de donnée, uniquement pour contrôler les données, pour sauver les données tu désactive la validation soit

$this->User->save($d,false

Pas besoin de plusieurs Controller. Les Controller sont comme des class. Par exemple dans la class User soit le Controller User, tu mets toutes les fonctions qui ont un rapport avec les utilisateurs.

Il doit y avoir un moyen de faire passer un argument au modèle afin de pouvoir identifier quel validation effectuer mais je n'ai pas encore trouver comment faire.

Si jamais la doc pour la solution que j'ai trouver: Cakephp 2.0 The Book

oui j ai essayé c bien j'aime gérer l'envoie de mail derrière c cool.
Merci