Ich benutze das Cupcake Forum Plugin in CakePHP. Es gibt ein Formular zum Auswählen der gewünschten Posts und das Senden des Formulars zum Löschen der Posts. Die Formulardaten werden anscheinend mit POST- und GET-Methoden gleichzeitig an die 'moderate' Funktion innerhalb des 'Themen'-Controllers gesendet. Die Funktion prüft zuerst, ob die gesendeten Daten POST sind. Wenn die Daten empfangen werden, zeigt es jedoch, dass es GET ist. Ein Mitprogrammierer und ich möchte den internen Code einer anderen Person nicht komplett ändern, aber wir können nicht herausfinden, wie die Daten mit beiden Methoden gesendet werden und als GET empfangen werden. Der Code aus dem Plugin ist unter:Einträge im Forum können nicht gelöscht werden. (CakePHP)
-------------- moderate.ctp (anzeigen) ------------------ ---
<?php echo $form->create('Post', array('url' => array('controller' => 'topics', 'action' => 'moderate', $topic['Topic']['slug']))); ?>
------------- topics_controller.php (Controller) -------
public function moderate($id) {
if ($this->RequestHandler->isGet()){
$this->log('Is GET!');
}
$user_id = $this->Auth->user('id');
$topic = $this->Topic->getTopicForViewing($id, $user_id, 'id');
// Access
$this->Toolbar->verifyAccess(array(
'exists' => $topic,
'permission' => $topic['ForumCategory']['accessRead'],
'moderate' => $topic['Topic']['forum_category_id']
));
$this->log('ID: '.$id.'\n');
if ($this->RequestHandler->isPost()){
$this->log('Is POST!');
}
if ($this->RequestHandler->isGet()){
$this->log('Is GET!');
}
$this->log($this->RequestHandler->getReferer());
$this->log(serialize($this->data));
// Processing
if ($this->RequestHandler->isPost()) {
$this->log('INSIDE POST!');
if (!empty($this->data['Post']['items'])) {
$items = $this->data['Post']['items'];
$action = $this->data['Post']['action'];
foreach ($items as $post_id) {
$this->log('Action: '.$action.'\n');
$this->log('PostID: '.$post_id.'\n');
if (is_numeric($post_id)) {
if ($action == 'delete') {
$this->Topic->Post->destroy($post_id);
$this->Session->setFlash(sprintf(__d('forum', 'A total of %d post(s) have been permanently deleted', true), count($items)));
}
}
}
}
}
Wir die Log-Checks hinzugefügt, die das Ergebnis von 'Is GET!' anzeigen in der Log-Datei von Cake. Da die Methode GET ist, ist die Anweisung 'if ($ this-> RequestHandler-> isPost())' niemals wahr; Daher werden die eingereichten Posts nicht gelöscht. Was vermissen wir?