下面是我的saveAction
代码(表单将数据传递到的位置)
public function saveAction()
{
$user = OBUser();
$form = $this->createForm(new OBUserType(), $user);
if ($this->request->getMethod() == 'POST')
{
$form->bindRequest($this->request);
if ($form->isValid())
return $this->redirect($this->generateUrl('success_page'));
else
return $this->redirect($this->generateUrl('registration_form'));
} else
return new Response();
}
我的问题是:如果$form->isValid()
返回false
,我如何获取错误
发布于 2011-11-22 01:52:23
下面是对我有效的解决方案。此函数位于一个控制器中,它将返回一个结构化数组,其中包含所有错误消息和导致错误消息的字段。
Symfony 2.0:
private function getErrorMessages(\Symfony\Component\Form\Form $form) {
$errors = array();
foreach ($form->getErrors() as $key => $error) {
$template = $error->getMessageTemplate();
$parameters = $error->getMessageParameters();
foreach($parameters as $var => $value){
$template = str_replace($var, $value, $template);
}
$errors[$key] = $template;
}
if ($form->hasChildren()) {
foreach ($form->getChildren() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
}
return $errors;
}
Symfony 2.1和更高版本:
private function getErrorMessages(\Symfony\Component\Form\Form $form) {
$errors = array();
if ($form->hasChildren()) {
foreach ($form->getChildren() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
} else {
foreach ($form->getErrors() as $key => $error) {
$errors[] = $error->getMessage();
}
}
return $errors;
}
发布于 2012-09-20 23:38:12
对于我的闪光消息,我对$form->getErrorsAsString()
很满意
编辑(来自Benji_X80):对于SF3,请使用$form->getErrors(true, false);
发布于 2013-03-29 06:49:23
symfony 2.1和更新版本的函数,没有任何不推荐使用的函数:
/**
* @param \Symfony\Component\Form\Form $form
*
* @return array
*/
private function getErrorMessages(\Symfony\Component\Form\Form $form)
{
$errors = array();
if ($form->count() > 0) {
foreach ($form->all() as $child) {
/**
* @var \Symfony\Component\Form\Form $child
*/
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
} else {
/**
* @var \Symfony\Component\Form\FormError $error
*/
foreach ($form->getErrors() as $key => $error) {
$errors[] = $error->getMessage();
}
}
return $errors;
}
https://stackoverflow.com/questions/6978723
复制相似问题