Php symfony 1.4同时验证两个字段[was“在processForm中修改响应内容”]

Php symfony 1.4同时验证两个字段[was“在processForm中修改响应内容”],php,symfony-1.4,httpresponse,Php,Symfony 1.4,Httpresponse,我试图修改Symfony 1.4中某些操作的响应内容 当我在processForm方法(调用表单绑定并给出表单处理操作的最终结果的方法)中处理一些表单时,在某些条件之后 我试过了 function processForm(sfWebRequest $request, sfForm $form) { $form->bind(...); // ... some validations/operations ... $cont = $this->getResponse(

我试图修改Symfony 1.4中某些操作的响应内容

当我在processForm方法(调用表单绑定并给出表单处理操作的最终结果的方法)中处理一些表单时,在某些条件之后

我试过了

function processForm(sfWebRequest $request, sfForm $form)
{
   $form->bind(...);
   // ... some validations/operations ...

   $cont = $this->getResponse()->getContent();
   $this->getResponse()->setContent("MODIFICATION!" . $cont);
   $this->getResponse()->sendContent();
}
但这当前向我发送了一个“无法修改标题信息-标题已发送”错误

这有可能吗?还是我在胡说八道? 有什么想法吗

谢谢大家!

编辑: 我想做的是以下几点

在executeNew操作中,我必须进行一些验证。所有特定于字段的验证都使用相应的表单验证程序正确完成

但是有一个验证同时考虑了两个字段的值,而不仅仅是其中一个。因此,由于没有找到同时为这两个字段创建验证器的方法,我决定通过重写表单的isValid方法进行验证,调用parent::isValid方法,并在此处验证我的双字段条件。当验证失败时,我返回false,正如isValid()应该返回的那样。但是,我还没有发现当这个特定的错误发生时,如何在表单附近编写错误消息。这就是为什么我希望更改响应的内容,这样我就可以为这个特定的错误条件添加自定义的错误消息,只有当它发生时

希望这有助于澄清我的帖子…

编辑:

您需要做的是创建一个post或pre验证器。这将允许您针对某种附加条件同时验证两个字段。很难说如何实施,因为我们不知道您的验证规则,但以下文档应该会有所帮助:

这将向您展示如何创建postValidator并在表单上使用它。有时,虽然您不需要重用此代码,但创建类是一种过火的行为。在这种情况下,您可以在表单上创建一个自定义方法,并使用
sfValidatorCallback
。。例如:

class myForm {


  public function configure()
  {
     // normal config stuff

    $this->mergePostValidator(new sfValidatorCallback(array(
      'callback' => array($this, 'postValidate')
    )));
  }

  public function postValidate($validator, $values, $arguments)
  {
     // your post validator code
  }
}
这样做将允许您定义错误消息,就像您通常为另一个验证器定义错误消息一样


processForm
不是您要转发到的操作,因此调用它的操作仍将尝试发送内容以及其他不正常的内容。问题是
sendContent
实际上会将内容回显到浏览器中。。。因此,当调用操作尝试按预期的方式再次发送头和内容时,您会收到典型的已发送头错误

如果需要立即发送内容,请在
sendContent
之后抛出
sfStopExecutionException
。但我怀疑这是你真正想做的。可能最好的做法是不发送内容,但允许控件像正常情况一样返回调用操作,然后处理从那里发送内容


您还可以将侦听器附加到
response.filter\u content
事件,但在这种情况下,我不确定这是否有什么好处。如果您除了添加测试字符串之外,还能够更好地描述您想要完成的任务,那么我们可以为您提供更好的指导。

您到底想要实现什么?几乎可以肯定有更好的方法可以做到这一点。谢谢,刚刚编辑了帖子以添加信息…我试图通过呼叫操作发送内容,但没有成功,错误是相同的…非常感谢!你在编辑中的提示已经完成了!非常感谢你。。。。我猜这篇文章的标题目前没有反映问题/解决方案的当前状态,我猜我也会编辑它…哇,只是遇到了一个小问题。。。我在一个新的操作/表单中使用了同样的东西,但是postValidator给了我一个:“为foreach()提供的参数无效”在第169行的path/to/symfony/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php中,它只在我的数据库中存储空值。尝试在processForm中检查$form->getValues不会给我任何值:你知道为什么吗?我们需要查看你的操作和验证程序代码。你应该创建一个新问题并发布代码。你知道吗你说得对……谢谢。