2010-04-07 4 views
0

скажем, у меня есть блог с модулем «сообщение».Отображение ошибок проверки формы в шаблоне (Symfony)

Теперь я показываю почту как это:?/Столб индекс ID = 1

в индексе-акции я создать новый CommentForm и передать его как $ this-> формы шаблона и она отображается в нижней части сообщения (это просто текстовое поле, ничего особенного). Для действия формы установлено значение «post/addcomment». Как я могу отобразить ошибки проверки в этой форме? используя setTemplate ('индекс') не работает, потому что я должен был бы передать идентификатор = 1 к нему ...

благодаря

UPDATE:

вот пример кода:

public function executeIndex(sfWebRequest $request) 
    { 
     $post = Doctrine::getTable('Posts')->find($request->getParameter('id')); 
     $this->post = $post->getContent(); 

     $comments = $post->getComment(); 

     if ($comments->count() > 0) 
       $this->comments = $comments; 

     $this->form = new CommentForm(); 
     $this->form->setDefault('pid', $post->getPrimaryKey()); 
    } 

    public function executeAddComment(sfWebRequest $request) { 
    $this->form = new CommentForm(); 

    if ($request->isMethod('post') && $request->hasParameter('comment')) { 
     $this->form->bind($request->getParameter('comment')); 
     if ($this->form->isValid()) { 
      $comment = new Comment(); 
      $comment->setPostId($this->form->getValue('pid')); 
      $comment->setComment($this->form->getValue('comment')); 
      $comment->save(); 
      $this->redirect('show/index?id='.$comment->getPostId()); 
     } 
    } 

}

и мой комментарий Форма:

class CommentForm extends BaseForm { 
    public function configure() { 
     $this->setWidgets(array(
       'comment'  => new sfWidgetFormTextarea(), 
       'pid'   => new sfWidgetFormInputHidden() 
     )); 

     $this->widgetSchema->setNameFormat('comment[%s]'); 

     $this->setValidators(array(
       'comment' => new sfValidatorString(
         array(
          'required' => true, 
          'min_length' => 5 
          ), 
         array(
          'required' => 'The comment field is required.', 
          'min_length' => 'The message "%value%" is too short. It must be of %min_length% characters at least.' 
          )), 
       'pid'  => new sfValidatorNumber(
         array(
          'required' => true, 
          'min'  => 1, 
          'max'  => 4294967295 
          ), 
         array(
          'required' => 'Some fields are missing.' 
          )) 
     )); 
    } 
} 

и, наконец, indexSuccess:

<?php echo $post; ?> 

//show comments (skipped) 

<h3>Add a comment</h3> 

<form action="<?php echo url_for('show/addComment') ?>" method="POST"> 
    <table> 
     <?php echo $form ?> 
     <tr> 
      <td colspan="2"> 
       <input type="submit" /> 
      </td> 
     </tr> 
    </table> 
</form> 

это все.

ответ

0

Если вы используете sf 1.4, просто поместите executeAddComments и executeIndex вместе в одну функцию (например, executeIndex), и все будет в порядке. setTemplate не будет работать здесь.

0

Вы используете метод handleError в действии? Id = 1 часть вашего URL не должна меняться, если внутри метода handleError вы возвращаете sfView :: SUCCESS;

UPDATE:

Это на самом деле изменения, что вам нужно сделать, это предоставить идентификатор вместе с комментарием [который я уверен, что вы уже делаете, потому что комментарий, который не относится к столбу Безразлично это имеет смысл], то в методе handleError создайте экземпляр объекта post там.

+0

Я был validatig формы, как они сделали это здесь: http://www.symfony-project.org/forms/1_4/en/02-Form-Validation, поэтому я даже не использовал handleError – Jay

+0

return sfView :: SUCCESS; принимает меня к addCommentSuccess, а не indexSuccess ... – Jay

+0

И у вас все еще есть вызов setTemplate? – sjobe

0

Попробуйте изменить действие формы для

<?php echo url_for('show/addComment?id=' . $post->getId()) ?> 

Делая это, ваш параметр идентификатор сообщения должны быть доступны даже по вашему запросу пост, и он должен работать с setTemplate («индекс») или вперед в конце of executeAddComment

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