Php Symfony2:插入文件集合
在尝试插入具有文件字段的实体集合时,我无法确定是否有更好的方法来创建由Document::Document注释强制转换的UploadedFile对象。这是我的代码,非常感谢对它的任何改进帮助:)Php Symfony2:插入文件集合,php,forms,symfony,collections,doctrine-orm,Php,Forms,Symfony,Collections,Doctrine Orm,在尝试插入具有文件字段的实体集合时,我无法确定是否有更好的方法来创建由Document::Document注释强制转换的UploadedFile对象。这是我的代码,非常感谢对它的任何改进帮助:) 去看看我的表。这应该会给你一些启发:)谢谢,我用那个指南创建了文件上传,也遵循了收集指南的步骤,但重点是合并这两个。上载告诉您在插入时上载,但不告诉您如何遍历它们为什么需要遍历它们?Symfony2表单组件应将每个上载的文件分配给单独的实体本身。您所需要的只是一个OneToMany关系和正确的表单类型。
去看看我的表。这应该会给你一些启发:)谢谢,我用那个指南创建了文件上传,也遵循了收集指南的步骤,但重点是合并这两个。上载告诉您在插入时上载,但不告诉您如何遍历它们为什么需要遍历它们?Symfony2表单组件应将每个上载的文件分配给单独的实体本身。您所需要的只是一个
OneToMany
关系和正确的表单类型。我想这已经找到了问题,还没有解决它,但显然我忽略了控制器中集合的set方法。这也非常有帮助!再次感谢
public function createAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$user = $this->get('security.context')->getToken()->getUser();
$entity = new Paper();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$entity->setAuthor($user);
$em->persist($entity);
// chotest foreach in the universe
if (isset($_FILES) && array_key_exists('arkad1a_cfpbundle_paper', $_FILES)) {
foreach ($_FILES['arkad1a_cfpbundle_paper']['name']['documents'] as $k => $v) {
$document = new UploadedFile(
$_FILES['arkad1a_cfpbundle_paper']['tmp_name']['documents'][$k]['document'],
$_FILES['arkad1a_cfpbundle_paper']['name']['documents'][$k]['document'],
$_FILES['arkad1a_cfpbundle_paper']['type']['documents'][$k]['document'],
$_FILES['arkad1a_cfpbundle_paper']['size']['documents'][$k]['document'],
$_FILES['arkad1a_cfpbundle_paper']['error']['documents'][$k]['document'],
false
);
$Document = new \Arkad1a\CFPBundle\Entity\Document();
$Document->setAuthor($user)
->setDocument($document)
->setPaper($entity)
->upload();
$em->persist($Document);
}
}
$em->flush();
return $this->redirect($this->generateUrl('paper_show', array('id' => $entity->getId())));
} else {
die('invalid');
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}