首页 > 解决方案 > 使用外键关系验证表单

问题描述

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

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
    ));

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

标签: symfonysymfony-formssymfony-validator

解决方案


假设您的 User 实体名为User,在名为App的包中,在您的控制器中的 Entity User中的属性名为 username :

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

推荐阅读