我想要能够从我的所有控制器访问代码,那么实现它的最佳方式是什么?下面的代码是处理表单错误,我一直在我的项目中的每一个控制器中复制它。将复制代码移动到适当的地方并从所有控制器访问它们
所以我想保持getErrorMessages()
其他地方,并在控制器下面访问它。
注:我读了约services,但感到困惑和this example!
示例控制器:
class HelloController extends Controller
{
public function processAction(Request $request)
{
//More code here
if ($form->isValid() !== true)
{
$errors = $this->getErrorMessages($form);
return $this->render('SayHelloBundle:hello.html.twig',
array(
'page' => 'Say Hello',
'form' => $form->createView(),
'form_errors' => $errors
));
}
//More code here
}
private function getErrorMessages(FormInterface $form)
{
$errors = array();
foreach ($form->getErrors() as $error)
{
$errors[] = $error->getMessage();
}
foreach ($form->all() as $child)
{
if (! $child->isValid())
{
$options = $child->getConfig()->getOptions();
$field = $options['label'] ? $options['label'] : $child->getName();
$errors[$field] = implode('; ', $this->getErrorMessages($child));
}
}
return $errors;
}
}
如果你使用Form Symfony2的组件,你不需要getErrorMessages功能,因为错误是自动表单组件处理(见关于书表格文档,食谱和组件)。 – 2014-08-31 12:30:18
上面的代码只是一个例子! – BentCoder 2014-08-31 12:37:07