2011-05-01 3 views
1

Je crée vue pour enregistrer et envoyer des données au contrôleurComment envoyer un formulaire de données à un autre modèle?

//app::import('Model','Myprofile'); 
Class MembersController extends AppController { 
    var $name = 'Members'; 
    var $helpers = array('Form', 'Session'); 
    var $uses = array('Myprofile'); // 

    function register() { 
     //$myprofile = new Myprofile(); 
     if (!empty($this - > data)) { 
      $this - > Member - > create(); 
      if ($this - > Member - > save(($this - > data['Member']['username']), ($this - > data['Member']['password'])) && $this - > Myprofile - > save(($this - > data['Myprofile']['name']), ($this - > data['MyProfile']['address']), ($this - > data['Myprofile']['phonenumber']))) { 
       $this - > redirect('index'); 
      } 
     } else { 

      $this - > Session - > setFlash('failed'); 
     } 

    } 

Je veux envoyer le formulaire de données memberscontroller à MyProfile Modèle J'essaie d'utiliser

$use = array('Myprofile'); 

je suis

Undefined property: MembersController::$Member 

quand j'utilise

//app::import('Model','Myprofile'); 
//$myprofile = new Myprofile() 

i got

Undefined property: MembersController::$Myprofile 

Je ne sais pas la bonne ou non Il y a aussi une autre façon de résoudre mon problème Merci pour tout conseil

Répondre

0

Si vous utilisez le tableau $uses, assurez-vous que le modèle actuel est également inclus dans ce tableau. Sinon, le modèle actuel n'est pas inclus par défaut si vous définissez un tableau spécifique $uses.

Si MyProfile est lié à Member vous pouvez y accéder via

$this->Member->MyProfile; //depends on associations 

Vous pouvez également utiliser App:import

App:import('Model', array('Myprofile')); //loads the class 
$myProfile = new MyProfile(); 
// OR 
MyProfile::staticMethod(); 
0

Vous devez ajouter les deux modèles à votre $uses tableau:

var $uses = array('Myprofile', 'Member'); 
+0

้ำั hey J'ai suivi les conseils que vous m'avez donnés mais j'ai obtenu la propriété Undefined: MembersController :: $ Myprofile – krissanawat

1

Le tableau $ uses ne vous donnera accès aux modèles que vous spécifiez en elle. Si vous aviez mis en commentaire $ uses, vous auriez toujours accès au modèle $ this-> Member par défaut puisque vous êtes dans le contrôleur Members. Une fois que vous avez ajouté un autre modèle au tableau $ uses, n'oubliez pas d'inclure également votre modèle initial.

J'ai aussi constaté que, dans certains cas, il est très utile de vous assurer que lorsque vous faites quelque chose comme ça, vous devez spécifier votre modèle par défaut FIRST

var $uses = array('Member', 'Myprofile'); 

Sinon, vous pourriez obtenir résultats inattendus d'actions telles que $ this-> paginate()

+0

้ำ hey j'ai suivi les conseils que vous les gars mais je suis Undefined property: MembersController :: MyProfile – krissanawat

+0

$, alors le problème est probablement dans le code de votre modèle MyProfile, que ce soit dans son nom de classe ou dans son nom de fichier. – stevecomrie

0

essayez d'utiliser $this->loadModel('Myprofile'); dans votre action.

et êtes-vous sûr que le nom de votre modèle est 'Myprofile'? Vous pouvez même le déboguer pour voir si elle renvoie vrai ou faux.

Cela vous aidera à déterminer si le modèle a été correctement installé.

0

Vous pouvez appeler toutes les méthodes publiques de modèles connexes de manière normale.pour exemple

Dans profile.php

function someMethod($param = null) { 
    // some definition 
} 

De MembersController.php

function register () { 
    $this->Member->Profile->someMethod($my_data_to_pass); // if related 
    /* if not related 
    $this->loadModel('Profile'); 
    $this->Profile->someMethod($my_data_to_pass); 
    */ 
} 

Comme une note de côté, si vous exécutiez dans cette situation pour faire des urls plus sensible, S'il vous plaît examiner Router (http://book.cakephp.org/2.0/en/core-utility-libraries/router.html)

Questions connexes