OneToMany关系以及如何创建表单

时间:2014-11-30 12:15:14

标签: php forms symfony

我正在为我的学校开展一个业余项目,主要目的是建立一个伪社交网络,以便在学生之间分享学习资源。

我正在使用FOSUserBundle进行身份验证和用户管理。我的数据库有一些彼此相关的表,但问题从以下开始:

与资源表具有OneToMany关系的用户表,因为一个用户可以发布或拥有许多资源。

我已经在实体中创建了关系,将其发布到数据库服务器并且看起来是正确的,但是我想知道什么是显示/处理表单以添加新资源的最佳方式,因为数据必须相关的。

我做了类似的事情,在我的Schools表和用户之间添加了OneToMany关系(因为一个学校可以容纳许多学生),在我从FOSUserBundle修改的注册表单中显示实体选择字段,这是正常的,但是我我不完全确定它是如何工作的,因为这个魔法主要由FOS捆绑处理。

我有资源添加表单的formType设置,我想知道在提交表单后确保数据关系的最佳方法是什么。

P.S。设置非常简单。我有用于资源添加表单设置的FormType,它正确显示。我用我的控制器用

来调用它

$newResourceForm = $this->createForm(new ResourceType(), $resource); $newResourceForm->handleRequest($request);

然后在渲染模板时使用createView()方法。

EDIT1:如果你们需要来自不同文件的实际代码,包括我的实体,请告诉我,我会添加一些粘贴的链接,但我认为我目前对这个问题的描述就足够了。

1 个答案:

答案 0 :(得分:1)

您可以创建用户表单类型,然后在该表单中嵌入您的ResourceType表单类型。

E.g。类似的东西:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('resources', 'collection', array('type' => new ResourceType()));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Your\Namespace\Entity\YourUserModel',
        ));
    }

    public function getName()
    {
        return 'user';
    }
}

Symfony表单在工作方式上非常灵活,我建议您阅读forms documentation

how to embed a collection of formscollection field type

在使用正确的用户保存数据方面 - >资源关系,symfony将为您处理,如果您正确构建您的表单&在提交有效表单后保留您的实体。