Не могу удалить сообщения на форуме.(CakePHP) - PullRequest
0 голосов
/ 20 декабря 2010

Я использую плагин Cupcake Forum в CakePHP.Есть форма для выбора нужных постов, а затем отправки формы для удаления постов.Данные формы, по-видимому, отправляются функции «модерировать» в контроллере «тем», используя методы POST и GET одновременно.Функция сначала проверяет, являются ли отправленные данные POST.Однако, когда данные получены, это показывает, что это GET.Мы с программистом не хотим полностью менять чужой внутренний код, но мы не можем понять, как данные отправляются обоими методами и принимаются как GET.Код из плагина ниже:

-------------- умеренный.ctp (просмотр) ---------------------

<?php echo $form->create('Post', array('url' => array('controller' => 'topics', 'action' => 'moderate', $topic['Topic']['slug']))); ?>

------------- themes_controller.php (контроллер) -------

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)));
      }
     }
    }
   }
  }

Мы добавили проверки журнала, которые показывают результат 'Is GET!'в лог-файл Cake.Поскольку метод GET, оператор if ($ this-> RequestHandler-> isPost ()) 'никогда не выполняется;поэтому отправленные сообщения не удаляются.Чего нам не хватает?

1 Ответ

0 голосов
/ 21 июня 2011

Попробуйте изменить moderate.ctp на

<?php 
echo $form->create('Post', array(
    'url' => array(
        'controller' => 'topics', 
        'action' => 'moderate', 
        $topic['Topic']['slug'],
     ),
    'type' => 'post',
)); 
?>
...