Forms 调用HandlerRequest或bind时未找到Silex ExecutionContext::getValidator()
我有以下silex代码,用于在完成时呈现简单的表单和消息:Forms 调用HandlerRequest或bind时未找到Silex ExecutionContext::getValidator(),forms,validation,silex,Forms,Validation,Silex,我有以下silex代码,用于在完成时呈现简单的表单和消息: $app->register(new Silex\Provider\FormServiceProvider\FormServiceProvider()); $app->register(new Silex\Provider\ValidatorServiceProvider()); $app->match('/contact', function(Request $request) use ($app) { $for
$app->register(new Silex\Provider\FormServiceProvider\FormServiceProvider());
$app->register(new Silex\Provider\ValidatorServiceProvider());
$app->match('/contact', function(Request $request) use ($app) {
$form = $app['form.factory']->createBuilder('form', null)
->add('name', 'text', array('required' => true, 'label' => 'Name',))
->add('submit', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
die('success);
}
return $app['twig']->render('contact.html.twig', array(
'form' => $form->createView(),
));
但是,在提交表单时,我遇到了一个错误:
Call to undefined method Symfony\\Component\\Validator\\ExecutionContext::getValidator()
in /home/user/project/vendor/symfony/form/Symfony
/Component/Form/Extension/Validator/Constraints/FormValidator.php on line 56
我正在如上所述注册ValidatorServiceProvider,因此我对它可能是什么感到困惑。它看起来是一个Symfony bug。Backporting为我修复了它。您应该在FormServiceProvider之前注册验证器。要修复它,请更新composer.json以指定symfony 2.5。2:
"symfony/symfony": "2.5.2",
而不是
"symfony/symfony": "~2.5",
然后将composer.lock移动到composer.lock.bak并运行
composer update symfony/symfony
这为我解决了问题
或者,您可以等待symfony 2.5.4解决此问题:
我把我的
symfony\forms
版本掉了一个,它解决了这个问题,非常感谢您发布这个!同样,我在composer.json中包含了symfony/validator组件,尽管我使用的是symfony/frameworks标准版包。我删除了它,表单验证正在工作。谢谢不要删除锁定文件,因为这将更新所有内容并释放项目锁定到的版本。相反,只需执行composer update symfony/symfony
即可更新该软件包,无需更改锁定文件谢谢,你救了我一天。