Forms 调用HandlerRequest或bind时未找到Silex ExecutionContext::getValidator()

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

我有以下silex代码,用于在完成时呈现简单的表单和消息:

$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
即可更新该软件包,无需更改锁定文件谢谢,你救了我一天。