2010-10-08 29 views
0

Simple question d'un n00b absolu. J'essaie de créer un écran de contenu d'édition basé sur le code donné dans le tutoriel de blog sur le site de gâteau.CakePHP: champs non remplis dans l'écran d'édition

Voilà ma fonction d'édition dans le contrôleur (il est nommé Contenu):

function edit($id = null) { 
    $this->Content->id = $id; 
    Debugger::dump($this->Content->id); 
    if(empty($this->data)) { 
     $this->data = $this->Content->read(); 
     Debugger::dump($this->Content); 
    } 
    else { 
     if($this->Content->save($this->data)) { 
     $this->Session->setFlash('Content has been updated.'); 
     $this->redirect(array('action' => 'index')); 
     } 
    } 
} 

Et ceci est edit.ctp:

echo $form->create('Content', array('action' => 'edit')); 
echo $form->input('id', array('type' => 'hidden')); 
echo $form->input('title'); 
echo $form->input('nicename'); 
echo $form->end('Save'); 

Cependant, quand je visite l'écran d'édition, la les champs de saisie ne sont pas mis en POPULATION avec les données demandées.

J'utilise HTML Helper pour générer les liens et mon lien d'édition prend la forme:

http://localhost/contents/edit/id:4c8efaa0-02fc-46bf-ac65-06a07614f57d 

Comme vous pouvez le voir, je l'ai présenté deux décharges Debugger dans la fonction d'édition du contrôleur ... ceux-ci montrent que $ this-> Content-> id reste NULL lorsque je visite cette URL.

MAIS, si je modifier l'URL à cette forme (notez que je l'ai utilisé '=' au lieu d'un ':'):

http://localhost/contents/edit/id=4c8efaa0-02fc-46bf-ac65-06a07614f57d 

rapports Debugger $ this-> Content-> id pour avoir la valeur correcte ...

Cependant, mes champs ne sont toujours pas remplis.

La fonction d'index fonctionne bien mais ...

function index() { 
    $this->set('contents', $this->Content->find('all')); 
} 

La fonction ci-dessus est listant le contenu correctement!

Où est-ce que je me trompe? Est-ce que je rate un peu de code essentiel dans la vue? Toute aide sera grandement appréciée.

Merci, m^e

Répondre

2

Le problème est ici:

http://localhost/contents/edit/id:4c8efaa0-02fc-46bf-ac65-06a07614f57d 

Fondamentalement, votre URL devrait ressembler à:

http://localhost/contents/edit/4c8efaa0-02fc-46bf-ac65-06a07614f57d 

Comme vous pouvez remarquer l'id: manque de l'URL correcte. La raison: Si vous passez l'identifiant: c'est un paramètre nommé et il n'est pas assigné à $ id dans la fonction.

Votre lien pour le formulaire d'édition devrait ressembler à ceci:

$this->Html->link('Edit', array('controller'=>contents', 'action'=>'edit', $id_variable)); 
+0

Merci Nik. En attendant la réponse, j'ai décidé de gratter le code et de repartir à zéro ... et je suis arrivé à la même conclusion que le vôtre en vérifiant les liens générés par les échafaudages. –

+0

Ummm ..J'ai toujours des problèmes avec la génération de liens .. Voici mon code: echo $ html-> link ('Edit', array ('controller' => 'contents', 'action' => 'edit', 'id' => $ item ['Content'] ['id'])); –

+0

Et ... peu importe .. compris. Il devrait être: echo $ html-> link ('Edit', array ('controller' => 'contenu', 'action' => 'edit', $ item ['Contenu'] ['id'])) –