假设我有一个带有“post”模块的博客。
现在我显示一个这样的帖子:post / index?id = 1
在index-action中我生成一个新的CommentForm并将其作为$ this->表单传递给模板,它显示在帖子的底部(它只是一个文本字段,没什么特别的)。表单操作设置为“post / addcomment”。如何在此表单中显示验证错误?使用setTemplate('index')不起作用,因为我必须将id = 1传递给它...
感谢
更新:
这是一个示例代码:
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 :(得分:0)
您是否在操作中使用handleError方法?如果在handleError方法中,你返回sfView :: SUCCESS;
,你的url的id = 1部分不应该改变更新:
它实际上发生了变化,你需要做的是提交id和评论[我确定你已经在做了,因为没有引用帖子的评论没有多大意义],然后在你的handleError方法中,实例化post对象。
答案 1 :(得分:0)
如果您正在使用sf 1.4,只需将executeAddComments和executeIndex放在一个函数中(例如executeIndex),您就可以了。 setTemplate在这里不起作用。
答案 2 :(得分:0)
尝试将表单操作更改为
<?php echo url_for('show/addComment?id=' . $post->getId()) ?>
这样做,你的post id参数应该在你的帖子请求中可用,它应该与setTemplate('index')一起使用或者在executeAddComment结束时转发