1

使用validation.yml 定义时没有调用我的验证。使用 php 或注释一切正常。

namespace AppBundle\Form;

use Symfony\Component\Validator\Context\ExecutionContextInterface;

class LoginForm
{
    private $login;
    private $password;

    public function __construct($login, $password)
    {
        $this->login = $login;
        $this->password = $password;
    }

    public function validate(ExecutionContextInterface $context)
    {
        $context->buildViolation('Error')
            ->atPath('login')
            ->addViolation();
    }
}

这是我的验证.yml

AppBundle\Form\LoginForm:
    constraints:
        - Callback: [validate]

这是我的控制器

class LoginController extends Controller
{
    public function loginAction(Request $request)
    {
        if ($request->isMethod('POST')) {
            $login = $request->request->get('loginform_login');
            $password = $request->request->get('loginform_password');
            $form = new LoginForm($login, $password);
            $errors = $this->get('validator')->validate($form);
            if (count($errors) > 0) {
                return $this->render('login/error.html.twig');
            }
            return $this->render('login/ok.html.twig');
        }
        return $this->render('login/login.html.twig');
    }
}

无论我输入哪个登录名或密码,上面的代码总是返回“ok”。有什么线索吗?

4

2 回答 2

3

您需要将validation.yml文件放在Resources/config捆绑包的目录中。

从 Symfony 2.7 开始,Symfony 也会从Resources/config/validation目录加载文件。

引用官方文档

从 Symfony 2.7 开始,位于 bundle 的 Resources/config/validation 子目录中的 XML 和 Yaml 约束文件被加载。在 2.7 之前,仅加载了 Resources/config/validation.yml(或 .xml)。

有效路径的一些示例:

  • src/AppBundle/Resources/config/validation.yml
  • src/AppBundle/Resources/config/validation/foo.yml
于 2015-11-03T19:41:05.823 回答
1

根据我们在评论中的反复和提供的示例,与当前的食谱示例相比,一切看起来都不错。我们坚定地处于头脑风暴/“看什么坚持”的舞台上。以下是一些剩余的想法:

  1. 你的validation.yml文件不能被解析/加载吗?您可以尝试向文件添加一些其他属性级别的约束,只是为了排除回调作为异常值。

  2. 您可以尝试lint:yamlCLI 工具,但从之前的遭遇中我预计任何格式错误的 YAML 都会引发更明确的解析错误。

  3. 不可能(尤其是在最近的文档闪电战之后),但也许食谱示例不是最新的,并且配置行为已经以某种方式发生了变化。

  4. 启动 XDebug 并开始逐步完成验证过程。确保您确实点击了验证回调。如果没有,请尝试使用外部或静态回调方法,看看是否可以缓解问题。

除非上述任何一项,否则我会怀着极大的兴趣等待比我自己更明智的答案!

于 2015-10-29T00:41:01.130 回答