代码之家  ›  专栏  ›  技术社区  ›  Andrew Atkinson

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

  •  3
  • Andrew Atkinson  · 技术社区  · 11 年前

    我有以下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,所以我很难理解它可能是什么。

    3 回复  |  直到 11 年前
        1
  •  7
  •   Gawain    11 年前

    看起来是Symfony的bug。背驮 this commit 为我修复了它。

        2
  •  2
  •   sonique    11 年前

    要修复此问题,请更新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来解决这个问题:

    https://github.com/symfony/symfony/issues/11580

        3
  •  0
  •   Ralf Hertsch    11 年前

    您应该在FormServiceProvider之前注册Validator。