Php symfony 1.4同时验证两个字段[was“在processForm中修改响应内容”]
我试图修改Symfony 1.4中某些操作的响应内容 当我在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(
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不会给我任何值:你知道为什么吗?我们需要查看你的操作和验证程序代码。你应该创建一个新问题并发布代码。你知道吗你说得对……谢谢。