使用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