我正在为我的学校开展一个业余项目,主要目的是建立一个伪社交网络,以便在学生之间分享学习资源。
我正在使用FOSUserBundle进行身份验证和用户管理。我的数据库有一些彼此相关的表,但问题从以下开始:
与资源表具有OneToMany关系的用户表,因为一个用户可以发布或拥有许多资源。
我已经在实体中创建了关系,将其发布到数据库服务器并且看起来是正确的,但是我想知道什么是显示/处理表单以添加新资源的最佳方式,因为数据必须相关的。
我做了类似的事情,在我的Schools表和用户之间添加了OneToMany关系(因为一个学校可以容纳许多学生),在我从FOSUserBundle修改的注册表单中显示实体选择字段,这是正常的,但是我我不完全确定它是如何工作的,因为这个魔法主要由FOS捆绑处理。
我有资源添加表单的formType设置,我想知道在提交表单后确保数据关系的最佳方法是什么。
P.S。设置非常简单。我有用于资源添加表单设置的FormType,它正确显示。我用我的控制器用
来调用它 $newResourceForm = $this->createForm(new ResourceType(), $resource);
$newResourceForm->handleRequest($request);
然后在渲染模板时使用createView()
方法。
EDIT1:如果你们需要来自不同文件的实际代码,包括我的实体,请告诉我,我会添加一些粘贴的链接,但我认为我目前对这个问题的描述就足够了。
答案 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 forms和collection field type。
在使用正确的用户保存数据方面 - >资源关系,symfony将为您处理,如果您正确构建您的表单&在提交有效表单后保留您的实体。