2009-06-10 4 views
-1

I Vous souhaitez séparer la fonctionnalité de base de données et la partie logique en ayant les opérations de base de données dans le modèle et la partie logique dans le contrôleur. Auparavant, j'avais tout le code dans la partie action du contrôleur lui-même. J'ai essayé quelque chose, mais ça ne marche pas.Modèle et structure de contrôleur dans CakePHP

C'est ce que j'avais plus tôt:

/* Controller */ 

function insertFormName(){  
    $formname=$_POST['formname']; 
    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

Et maintenant je l'ai changé un peu, ce qui ne fonctionne pas:

/* Controller */ 

function insertformname() 
    {  
     $this->data['Form']['formname']=$this->params['form']['formname']; 
     $this->Form->save($this->data); 
     $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

/* Model */  
function save($data) 
    {  

    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    return $newid; 

    } 

EDIT:

Je l'ai essayé une autre façon .. Avoir toute la fonctionnalité dans le modèle et juste appeler cette fonction du contrôleur.Est-ce que cette méthode est correcte?

/* Model */ 
function saveFormName($data) 
    {  
    $this->formname=$data[$this->name]['formname']; 
    $ret = $this->Form->query("Select id from forms order by id DESC LIMIT 1"); 
    $newid=$ret[0]['forms']['id']; 
    $this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 
    } 

/* controller */ 
function insertformname() 
    {  
    $this->data['Form']['formname']=$this->params['form']['formname']; 
    $this->Form->saveFormName($this->data); 
    } 
+0

Non, ce n'est pas non plus. D'après vos questions récentes, il semble que vous seriez le plus à même de relire le manuel du gâteau (book.cakephp.org). Cela ne devrait vous prendre que quelques heures, mais cela répondra aux questions que vous avez. Consultez également la série de tutoriels IBM DeveloperWorks sur Cakephp (sur scribd, recherchez-la). Un peu démodé, mais c'est la meilleure introduction à la philosophie Cake. –

Répondre

3

Il semble que vous devriez probablement revoir le livre de gâteaux (book.cakephp.org) et refaire les leçons. Si vous configurez votre formulaire correctement, vous ne devriez pas avoir à assigner manuellement $ _POST ['formname'] à $ this-> data. Essayez de définir les noms de champs dans votre formulaire (dans le HTML) pour les données [ModelName] [FieldName].

suivant:

$this->Form->updateAll(array('Form.name' => "'$formname'"),array('Form.id' => $newid)); 

Pourquoi le droit de données mise à jour d'après vous vous l'avez enregistré? D'où viennent les variables $ newid et $ formname? Vous les avez définis dans Model :: save, mais pas dans le controller.

Il semble que vous essayez de vous battre avec les trucs automagiques de Cake. Peut-être que vous devriez reposer votre question, mais s'il vous plaît épeler votre description de haut niveau plutôt que juste un "pourquoi ne pas ce travail?" Il me semble que cela pourrait être simplifié une tonne, mais, encore une fois, je ne suis pas tout à fait sûr de ce que sont vos objectifs.

respectueusement, Travis