2013-06-13 1 views
0

Попытка сохранить текущий идентификатор события '14' в URL/localhost/topp/events/view/14 'до event_id в таблице комментариев. Я использую функцию добавления в контроллере комментариев и кнопку «добавить комментарий» на странице событий view.ctp. Есть идеи? Мне было рекомендовано использовать скрытое поле id и $ this-> params ['pass'] ['0'], но не знаете, как это сделать, любые советы приветствуются. Заранее спасибо.Сохранение текущего вида id 14 in/localhost/topp/events/view/14 в поле таблицы комментариев

Мой текущий код комментарии контроллер добавить действие:

public function add() { 
     //$this->loadModel('Event'); 
     if ($this->request->is('post')) { 
      $this->Comment->create(); 
      $this->request->data['Comment']['user_id'] = $this->Auth->user('id'); 
        //Commented below is the logic Iam trying to achieve but is wrong 
      //$this->request->data['Comment']['event_id'] = $this->request->data['Event']['id']; 
      if ($this->Comment->save($this->request->data)) { 
       $this->Session->setFlash(__('The comment has been saved')); 
       $this->redirect(array('controller' => 'events', 'action' => 'myevents')); 
      } else { 
       $this->Session->setFlash(__('The comment could not be saved. Please, try again.')); 
      } 
     } 
    } 

/////////////////////////////// ///////// Мои события Просмотр кода с добавлением ссылки для комментариев //////////////////////////

<div class="events view"> 
    <?php echo $this->element('maintitle'); ?> 
    <?php echo $this->element('profile_area'); ?> 
<h2><?php echo __('Event'); ?></h2> 
    <dl>   
     <td><?php echo $this->Html->image('/files/event/photo/'.$event['Event']['id'].'/thumb_'.$event['Event']['photo'], array("alt" => "No Event Image")); ?>&nbsp;</td> 
     <td><?php echo $this->Html->image('/files/event/photo2/'.$event['Event']['id'].'/thumb_'.$event['Event']['photo2'], array("alt" => "No Event Image")); ?>&nbsp;</td> 
     <td><?php echo $this->Html->image('/files/event/photo3/'.$event['Event']['id'].'/thumb_'.$event['Event']['photo3'], array("alt" => "No Event Image")); ?>&nbsp;</td> 
     <td><?php echo $this->Html->image('/files/event/photo4/'.$event['Event']['id'].'/thumb_'.$event['Event']['photo4'], array("alt" => "No Event Image")); ?>&nbsp;</td> 
     <dt></dt> 
     <dd> 
     <br> 
     </dd> 
     <dt><?php echo __('Name'); ?></dt> 
     <dd> 
      <?php echo h($event['Event']['name']); ?> 
      &nbsp; 
     </dd> 
     <dt><?php echo __('Date'); ?></dt> 
     <dd> 
      <?php echo h($event['Event']['date']); ?> 
      &nbsp; 
     </dd> 


    </dl> 
</div> 
<div class="related"> 
    <h3><?php echo __('Related Comments'); ?></h3> 
    <?php if (!empty($event['Comment'])): ?> 

    <?php echo ('Add a comment for this event') ?> 
    <?php 
     $i = 0; 
     foreach ($event['Comment'] as $comment): ?> 

     <tr> 
      <td><?php echo $comment['comment']; ?></td> 

      <td class="actions"> 

      </td> 
     </tr> 
    <?php endforeach; ?> 

<?php endif; ?> 

    <div class="actions"> 
     <ul> 
      <li><?php echo $this->Html->link(__('New Comment'), array('controller' => 'comments', 'action' => 'add')); ?> </li> 
     </ul> 
    </div> 
</div> 
+0

Опубликовать код просмотра события :) Только часть, в которой у вас есть форму, которая добавляет комментарий – Nunser

+0

Спасибо за ваш ответ Nunser, я обновил вопрос, надеюсь, вы сможете помочь, еще раз спасибо. – Joshua

ответ

1

Позвольте мне посмотреть, правильно ли я это понял.

  1. Форма вы вывесили в представлении событий
  2. Ссылка «Новый комментарий» перенаправляет на другой точке зрения «добавить», в комментарии контроллера
  3. Этот дополнительный вид имеет форму на самом деле написать комментарий (Я предполагаю, что эта часть, вы здесь не указали)
  4. Вы хотите, чтобы функция добавления имела event_id, откуда она появилась.

Справа?

Затем вам необходимо передать идентификатор события из event_view.ctp (я придумываю имена здесь) в comment_add.ctp.

Так два способа сделать это

Первый способ: передать идентификатор события в ссылке и получать его в действии, как этот

//event_view.ctp 
//I'm going to assume you know the event id here 
$this->Html->link(__('New Comment'), array('controller' => 'comments', 'action' => 'add', $event_id)); ?> 

Это создаст ссылку, как комментарии/add/14, например, где 14 - это идентификатор события. Теперь в акции, вы получаете идентификатор

//pass it like parameter of the action 
public function add($event_id = null) { 
    if ($this->request->is('post')) { 
     $this->Comment->create(); 
     $this->request->data['Comment']['user_id'] = $this->Auth->user('id'); 

     //check that the event_id isn't null and that the event actually exists first 
     $this->request->data['Comment']['event_id'] = $event_id; 
     /*etc*/ 
    } 
} 

Вам не нужно проходить event_id к comment_add мнению, если пользователь не должен обращаться с этим, нет необходимости добавлять его в форму ,

Второй способ: Если вы не хотите передавать event_id внутри URL-адреса, вам необходимо передать его по почте. Чтобы сделать это, ссылка, которую вы должны добавить новые комментарии, должна измениться на форму с скрытым элементом event_id.

echo $this->Form->create('Comment', array('url'=>array('controller' => 'comments', 'action' => 'add'))); 
echo $this->Form->input('event_id', array('type'=>'hidden', 'value'=>$event_id); 
echo $this->Form->end('New comment'); 

//instead of <?php echo $this->Html->link(__('New Comment'), array('controller' => 'comments', 'action' => 'add')); ?> 

И в действии комментариев, проверьте, если сообщение появляется содержит event_id, но не user_id, например. Я нахожу этот способ немного беспорядочным, потому что каждый запрос, который вы получите для этого действия, будет отправкой, поэтому вам будет сложнее отличить, когда вы хотите отображать заполненную форму и когда вы хотите ее сохранить.

Мне нравится первый способ лучше, и я рекомендую это сделать. Но я чувствовал необходимость указать, что есть другие способы сделать это. Зависит от того, что вы хотите.

+1

Nunser ваш гений, спасибо за ваш подробный и всесторонний ответ на этот вопрос. Я реализовал первый метод и отлично работает. Я многому научился из этого ответа, спасибо снова брату. :) – Joshua

+0

Рад помочь :) – Nunser

Смежные вопросы