Моя проверка не вызывается при определении с помощью 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", независимо от того, какой логин или пароль я печатаю. Любая подсказка?
Вам нужно поместить файл validation.yml
каталог Resources/config
вашего пакета.
Начиная с Symfony 2.7, Symfony также загружает файлы из каталога Resources/config/validation
.
Цитирование официальных документов:
Начиная с Symfony 2.7 загружаются файлы ограничений XML и Yaml, расположенные в подкаталоге Resource/config/validation пакета. До 2.7 загружались только ресурсы /config/validation.yml (или.xml).
Некоторые примеры допустимых путей:
app/Resources
и src/AppBundle/Resources
, которых по умолчанию не существует.
Основываясь на наших комментариях и комментариях, все выглядит хорошо по сравнению с нынешними примерами поваренной книги. Мы твердо находимся в мозговой штурме/"видят, какая палка". Ниже приведены несколько остающихся мыслей:
Может ли ваш файл validation.yml
не получать синтаксический анализ/загрузку? Вы можете попробовать добавить в файл некоторые другие ограничения уровня свойства, чтобы исключить обратный вызов в качестве выхода.
Вы можете попробовать инструмент lint:yaml
CLI, хотя из предыдущих встреч я ожидаю, что любой некорректный YAML вызовет более явную ошибку синтаксического анализа.
Чрезвычайно маловероятно (особенно после недавнего близи документации), но, возможно, примеры поваренной книги не обновлены, а поведение конфигурации каким-то образом изменилось.
Запустите XDebug и начните процесс проверки. Убедитесь, что вы на самом деле нажали свой обратный вызов. Если нет, попробуйте использовать внешний или статический подход обратного вызова, просто чтобы убедиться, что это устраняет проблему.
Если вы не согласны с любым из вышеперечисленных вопросов, я буду ждать более обоснованного ответа, чем мой собственный, с большим интересом!
login: NotBlank
и он не работает. Я думаю, что мой validation.yml не загружается. Я выполнил поиск по этой проблеме, и я увидел людей, которые говорили, что эта validation: { enabled: true, enable_annotations: false }
строки validation: { enabled: true, enable_annotations: false }
в config.yml должна это делать, но это не так. : /
data_class
ли вы их в класс, указанный в свойствеdata_class
формы? Большинство примеров, которые я видел в кулинарных книгах, и большинство случаев, с которыми я лично сталкивался, имеют тенденцию добавлять ограничения к определенному полю, а не к форме. Поэтому и спрашиваю почему.