2013-10-23 8 views
6

मैं symfony2 में फ़ॉर्म से डेटाबेस में एक तस्वीर कैसे जोड़ूं। मैं एक लोगो के रूप में लोगो बनाना चाहता हूं और फॉर्म में डेटाबेस में प्रोजेक्ट चित्र स्टोर करना चाहता हूं। मैं यह कैसे करु?सिम्फनी फॉर्म से सिम्फनी 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'; 
    } 
} 

और यहाँ मेरी नियंत्रक है:

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

एक फ़ाइल अपलोड करने की प्रक्रिया अच्छी तरह से Symfony Docs - File Uploads with Doctrine अनुभाग में वर्णित

यहाँ मेरी रूप है।

कि आप दस्तावेज़ों का इस्तेमाल किया, डेटाबेस में फ़ाइल की सामग्री को बचाने के लिए, आप का उपयोग करना चाहिए प्रदान की है:

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

इस जोड़े buildform को

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

मैंने केवल प्रासंगिक भागों चिपकाए हैं