#symfony #symfony-forms #symfony-validator
#symfony #symfony-forms #symfony-валидатор
Вопрос:
Моя схема базы данных выглядит примерно так:
create table users (
id INT PRIMARY KEY,
username TEXT,
)
create table posts (
id INT PRIMARY KEY,
user_id INT,
title TEXT,
content TEXT,
)
я разрабатываю API для создания «сообщений», поэтому я публикую, как показано ниже, и отношение было определено в сущности User и Posts
{
"user": {
"username": "some_name"
},
"title": "testing",
"content": "test content"
}
и мне нужно проверить, отправлено ли правильное имя пользователя?. Как я мог это сделать?
Мой контроллер, подобный этому
$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->submit($request->request->all());
Моя форма конструктора выглядит следующим образом
$builder
->add('title', TextType::class)
->add('content', TextType::class)
->add('User', UserType::class, array(
'data_class' => User::class
));
Но он пытается создать пользователя каждый раз, вместо того, чтобы проверять, передано ли действительное имя пользователя. Есть идеи?
Комментарии:
1. вы хотите проверить, существует ли пользователь, прежде чем сохранять данные (post)?
2. @MohammedYassineCHABLI я хочу проверить, опубликовано ли действительное имя пользователя, если это так, сохраняйте данные в таблице «posts» с соответствующим идентификатором пользователя, иначе появится какая-то ошибка
3. что вы подразумеваете под допустимым именем пользователя? вы имеете в виду, существует ли пользователь без таблицы user, не так ли?
4. да @MohammedYassineCHABLI
Ответ №1:
Предположим, что ваша пользовательская сущность с именем User внутри пакета с именем App, свойство с именем username в сущности User в вашем контроллере :
$user = $em->getRepository('AppBundle:User')->findBy(array('username' => $username)); // we suppose that you have already extract the value of username from the request into $username.
И тогда вы можете просто проверить :
if($user instanceof User){
// do whatever you need here
}
Комментарии:
1. Возможно ли это сделать в конструкторе форм ` $builder -> add(‘title’, TextType::class) ->add(‘content’, TextType::class) ->add(‘User’, UserType::class, array( ‘data_class’ => User::class ));’ вместо контроллера
2. вы хотите добавить это в свой конструктор форм?
3. да, отношение уже определено внутри объекта, поэтому через конструктор форм мне нужно добавить
4. вы можете передать значение через $options конструктора форм
5. CreateForm(string $type, mixed $data = null, array $options = array()) // третий параметр