2013-10-23 12 views
6

symfony2でフォームからデータベースに画像を追加するにはどうすればいいですか?私は画像フィールドとしてロゴを作成し、フォームからデータベースにプロジェクトの画像を保存したい。これはどうすればいいですか?ここsymfonyフォームからsymfony 2に画像を追加しますか?

<?php 

namespace Projects\ProjectsBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class ProjectsType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('name') 
     ->add('description') 
     ->add('priority','choice', array(
'choices' => array('high' => 'high', 'low' => 'low', 'medium' => 'medium'))) 
     ->add('logo') 
     ->add('startedAt','datetime',array('label' => false,'data'=>new \DateTime(),'attr'=>array('style'=>'display:none;'))) 
     ->add('completedOn','datetime',array('label' => false,'data'=>new \DateTime(),'attr'=>array('style'=>'display:none;'))) 
     ->add('createdDatetime','datetime',array('label' => false,'data'=>new \DateTime(),'attr'=>array('style'=>'display:none;'))) 
     ->add('updatedDatetime','datetime',array('label' => false,'data'=>new \DateTime(),'attr'=>array('style'=>'display:none;'))) 
    ; 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Projects\ProjectsBundle\Entity\Projects' 
    )); 
    } 

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

と私のコントローラです::ファイルをアップロードするプロセスがうまくSymfony Docs - File Uploads with Doctrineセクションに記載されて

public function createAction(Request $request) 
{ 
    $user = $this->get('security.context')->getToken()->getUser(); 
    $userId = $user->getId(); 
    $entity = new Projects(); 
    $form = $this->createForm(new ProjectsType(), $entity); 
    $form->bind($request); 
    $entity->setCreatedBy($userId); 
    $entity->setUpdatedBy($userId); 
    $entity->setCompletedBy($userId); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 
    $_SESSION['projectid'] =$entity->getId(); 
    if($request->isXmlHttpRequest()) { 
     $response = new Response(); 
     $output = array('success' => true, 'description' => $entity->getdescription(), 'id' => $entity->getId(), 'name' => $entity->getname(), 'priority' => $entity->getpriority(), 'logo' => $entity->getlogo(), 'startedat' => $entity->getstartedat(),'completedon' => $entity->getcompletedon(),'completedby' => $entity->getCompletedBy(), 'createdby' => $entity->getcreatedby(), 'updatedby' => $entity->getupdatedby(), 'createddatetime' => $entity->getcreateddatetime(), 'updateddatetime' => $entity->getupdateddatetime()); 
     $response->headers->set('Content-Type', 'application/json'); 
     $response->setContent(json_encode($output)); 
     return $response; 
    } 

     return $this->redirect($this->generateUrl('projects_show', array('id' => $entity->getId()))); 
    } 

    return $this->render('ProjectsProjectsBundle:Projects:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

答えて

2

は、ここに私のフォームです。あなたは、ドキュメントを使用するデータベース内のファイルの内容を保存するために、あなたが使用する必要があります提供

$entity->setFile(file_get_contents(<filename>)); 
0

->add('logo', 'file',array('required'=>false,'data_class' => null)) 

とあなたのコントローラに

  if ($form->isValid()) { 
      $file = $form['logo']->getData(); 
      if(!empty($file)) 
      { 
       $dir = $this->get('kernel')->getRootDir() . 'path/to/dir/'; 
       $extension = $file->guessExtension(); 
       $now = new \DateTime('now'); 
       $filename = $now->format('YmdHis').rand(1, 99999).".".$extension; 
       if($file->move($dir, $filename)) 
         $entity->setImage($filename); 
      } 
をbuildformするためにこれを追加します

関連する部品のみを貼り付けた