【发布时间】:2015-10-27 16:43:16
【问题描述】:
使用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();
}
}
这是我的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”。 有什么线索吗?
【问题讨论】:
-
您如何使用其他两种方法添加约束?您是否将它们添加到表单的
data_class属性中指定的类中?我在说明书中看到的大多数示例以及我个人遇到的大多数示例都倾向于将约束添加到 特定 字段,而不是表单。所以我问。 -
如果我做对了,回调是类范围的。我使用了其他方法,如下所示symfony.com/doc/current/reference/constraints/Callback.html
-
确实如此,但在食谱示例中,它的范围是实体类,而不是表单类。您提供的示例是您的完整登录表单吗?您是否为它设置了 data_class(通过
configureOptions/setDefaultOptions设置)? -
实际上我的表单类只是一个常规类,我想执行某种数据验证(我认为人们称之为 Adhoc 验证)。正如你所看到的,我没有从 Symfony 表单类继承,nether 是一个实体类。回答您的问题,“是的”,这是我的完整登录表单。我不相信验证绑定到实体类。
标签: php validation symfony yaml symfony-2.7