【问题标题】:Validating form with the foreign key relation使用外键关系验证表单
【发布时间】:2019-08-16 18:21:06
【问题描述】:

我的数据库架构是这样的:

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": {
        "username": "some_name"
   },
   "title": "testing",
   "content": "test content"
}

我需要验证是否发布了正确的用户名?我怎么能这样做?

我的控制器是这样的

$post = new Post();
$form = $this->createForm(PostType::class, $post);
$form->submit($request->request->all());

我的builder表单是这样的

$builder
    ->add('title', TextType::class)
    ->add('content', TextType::class)
    ->add('User', UserType::class, array(
        'data_class' => User::class
    ));

但它每次都尝试创建用户,而不是检查是否通过了有效的用户名。有什么想法吗?

【问题讨论】:

  • 你想在持久化数据(post)之前检查用户是否存在?
  • @MohammedYassineCHABLI 我想检查是否发布了有效的用户名,如果是这样,将数据保存到带有相应用户 ID 的“帖子”表中,否则会显示一些错误
  • 有效用户名是什么意思?你的意思是如果用户存在联合国用户表,是吗?
  • 是的@MohammedYassineCHABLI

标签: symfony symfony-forms symfony-validator


【解决方案1】:

假设您的用户实体名为 User,在名为 App 的包中,实体 Userusername 的属性/strong> 在你的控制器中:

$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 
}

【讨论】:

  • 是否可以在表单构建器中执行此操作` $builder ->add('title', TextType::class) ->add('content', TextType::class) ->add( '用户', UserType::class, array('data_class' => User::class ));'而不是控制器
  • 您想在表单生成器中添加它吗?
  • 是的,实体内部已经定义了关系,所以我需要通过表单生成器添加
  • 你可以通过表单构建器的 $options 传递值
  • createForm(string $type, mixed $data = null, array $options = array()) // 第三个参数
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多