#php #forms #validation #symfony4
#php #формы #проверка #symfony4
Вопрос:
Функция контроллера:
public function new(Request $request)
{
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->handleRequest($request);
if ($form->isSubmitted()){
if($form->isValid()) {
die('working');
}
else
{
die("error");
}
}
return $this->render('post/index.html.twig',[
'form' => $form->createView(),
]);
}
В config/validator/validation.yaml
AppEntitypost:
properties:
title:
- Length:
min: 2
max: 50
minMessage: 'Your first name must be at least {{ limit }} characters long'
maxMessage: 'Your first name cannot be longer than {{ limit }} characters'
Класс формы:
class PostType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title',TextType::class,[
'attr' => [
'placeholder' => 'Enter Title',
'class' => 'Some Class',
]
])
->add('description',TextareaType::class,[
'attr' => [
'placeholder' => 'Enter Description',
'class' => 'Some Class'
]
])
->add('Save',SubmitType::class,[
'attr' => [
'class' => 'btn btn-success'
]
])
;
}
Я также добавил
validation: { enable_annotations: true }
в config/packages /framework.yaml
Вопрос: Я вставляю один алфавит, скажем, ‘z’ в title. Это должно вернуть ошибку проверки. isValid() должен выдавать false, но он выдает true. Кто-нибудь может сказать мне, как использовать проверку здесь?
Комментарии:
1.
AppEntitypost:
Пробовал сP
?2. @JonStirling: Спасибо, у меня сработало.
Ответ №1:
enable_annotations: true
означает, что вы определяете ограничения проверки с помощью аннотаций. Аннотация выглядит следующим образом:
class Author
{
/**
* @AssertNotBlank // apply NotBlank validator
*/
public $name;
}
В вашем коде вы используете правила проверки, определенные в yaml
файле, так что это определенно не аннотации.
Итак, либо переместите правила проверки в аннотации, либо удалите enable_annotations:true
, оставив только
validation: { enabled: true }
Комментарии:
1. выполнил ваше предложение, но проблема все та же.
2. Очистить кэш и все такое прочее.
3. проблема все еще существует. isValid () все время возвращает true.
4. Обновите вопрос соответствующими изменениями.
5. получил решение, на самом деле это синтаксическая ошибка, не использовал psr4 для имени объекта.