使用validation.yml进行定义时,我的验证没有被调用。 使用PHP或注释一切正常。Symfony回调Yaml验证
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();
}
}
这是我validation.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',无论哪个登录信息或密码i型。 任何线索?
你如何用其他两种方法添加约束?你是否将它们添加到表单的'data_class'属性中指定的类中? 我在食谱中看到的大多数例子以及我亲身遇到的大多数情况都倾向于将约束添加到*特定*字段,而不是表单。所以我问。 – ReservedDeveloper
如果我说得对,回调是类范围的。我使用了其他的方法,如下所示:http://symfony.com/doc/current/reference/constraints/Callback.html – vbsessa
这是真的,但范围是实体类,在食谱示例中,不是表单类。您是否提供了完整的登录表单?你有为它设置的data_class(通过'configureOptions/setDefaultOptions'设置)吗? – ReservedDeveloper