Domanda

Ho un semplice sito CakePHP (1.2) . Ho una pagina in cui è possibile modificare e salvare una persona. Quindi ho un modello e un controller Person.

Ogni persona non ha nessuno o più commenti, nella tabella dei commenti. Quindi ho un modello di commento e ho un'associazione hasMany sul mio modello di persona al modello di commento. View funziona alla grande.

La mia domanda è, nella pagina Visualizza persona, ho un pulsante Aggiungi commento. Come dovrebbe funzionare? Dovrei aspettarmi che il controller della persona includa un salvataggio per il record dei commenti o crei un controller dei commenti e lo salvi al di fuori della sua associazione per una persona?

Ho esperienza con PHP, ma nuovo di zecca per Cake.

Qualche idea? Penso che mi manchi qualcosa di ovvio, ma non sono sicuro di cosa fare. Mi sento come se questo fosse PHP farei riferimento a Person_id nel mio modulo per aggiungere commenti, e quindi utilizzerei un controller separato, ma sento che avere un controller per un modello semplice è inutile, poiché i commenti sono solo modificato nel contesto di un record Person.

idee?

È stato utile?

Soluzione

Non sono un esperto di CakePHP, ma penso comunque che abbia senso avere il proprio controller. Da quello che ricordo di aver fatto uno di quei tutorial sul blog di CakePHP è che devi collegare i commenti e il post nel modello dei commenti. Questo è un po 'del codice che ho da esso:

class Comment extends AppModel
{
  var $name = ‘Comment’;
  var $belongsTo = array(‘Person’);
}

E poi hai bisogno di un controller (commenti_controller.php):

class CommentsController extends AppController
{
  var $name = ‘Comments’;
  var $scaffold;
}

Alcuni SQL:

CREATE TABLE comments (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  author VARCHAR(50),
  comment TEXT,
  person_id INT,
  created DATETIME DEFAULT NULL,
  modified DATETIME DEFAULT NULL
);

Il $ scaffold crea un'applicazione CRUD per te, quindi quando vai a / commenti nel tuo browser puoi c riattivare, r u pdate e d elete i commenti. Quindi, come vedi, non c'è molto da fare qui. Tutto ciò che serve sono le tabelle del database e una piccola logica per fornire person_id.

Per salvare un commento (nella tua persona / vista):

<h2>Add comment</h2>
<?php
echo $form->create(‘Comment’, array(‘action’=>‘add/’.$person[‘Person’][‘id’]);
echo $form->input(‘author’);
echo $form->input(‘content’);
echo $form->submit(‘Add comment’);
echo $form->end();
?>

E nei tuoi commenti Controller:

function add($id = NULL) {
  if (!empty($this->data)) {
    $this->data['Comment']['person_id'] = $id;
    $this->data['Comment']['id'] = '';
    if ($this->Comment->save($this->data)) {
      $this->Session->setFlash('Commented added');
      $this->redirect($this->referer());
    }
  }
}

Quindi sostanzialmente si sovrascrive l'azione di aggiunta standard, che Cake aggiunge da sola. Spero che abbia un senso adesso. Inoltre, potresti aver bisogno di un percorso in modo che raccolga / commenti / aggiungi / ID. Non so di questa parte. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top