2011-09-15 62 views
2

我有一個ProfileType如下:Symfony2 Pre使用模型中的數據填充表單?

namespace Site\UserBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class ProfileType extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    {  
     $builder->add('facebook', 'text', array('required'=>false)) 
      ->add('myspace', 'text', array('required'=>false)) 
      ->add('twitter', 'text', array('required'=>false)) 
      ->add('soundcloud', 'text', array('required'=>false)) 
      ->add('youtube', 'text', array('required'=>false)) 
      ->add('website', 'text', array('required'=>false)) 
      ->add('bio', 'textarea', array('required'=>false)); 
    } 

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

,我想預先填充已在數據庫中,以便它在窗體可見數據的表單字段。

我的控制器:

namespace Site\UserBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Security\Core\SecurityContext; 
use Symfony\Component\HttpFoundation\Request; 
use Site\UserBundle\Entity\Profile; 
use Site\UserBundle\Form\Type\ProfileType; 

class ProfileController extends Controller 
{ 
    public function editAction() 
    {   
     $em = $this->getDoctrine()->getEntityManager(); 
     $editprofile = $em->getRepository('SiteUserBundle:Profile')->findOneByUser($user = $this->get('security.context')->getToken()->getUser()->getId()); 

     $form = $this->createForm(new ProfileType(), $editprofile); 

     $form->bindRequest($this->getRequest()); 
      if ($form->isValid()) { 
       $editprofile->setUpdated(new \DateTime("now")); 
       $em->flush(); 

       return $this->redirect($this->generateUrl('SiteUserBundle_login')); 
      } 

     return $this->render(
      'SiteUserBundle:Default:editprofile.html.twig', 
      array('form' => $form->createView()) 
     ); 
    } 
} 

任何想法?我認爲這種方式更容易更新用戶配置文件。

+0

請確認1)$ editprofile是有效的,並且2)在$ form-> isvalid之後放置$ form-> getData(),並檢查它是否有有效的表單數據。 – Tjorriemorrie

+0

是的。一切安好。我只是想預先使用數據庫中的數據填充表單輸入。也許我應該分配變量併發送它們來查看。 –

回答

0

之前綁定:

$editProfile->setSomething... // the stuffs from the database 
$form->setData($editProfile); 
4

通過

find($id) 

更換

findOneByUser($id) 

也可以嘗試傳遞$ id作爲蛞蝓從網址到你的行動。 url:example.com/page/id

sampleAction($id){} 
0

如果實際提交表單,則只應將請求綁定到表單。

if ('POST' === $request->getMethod()) { 
    $form->bindRequest($request); 
    ... 
} 
0

嘗試轉儲$ editprofile,檢查它返回的內容,它應該返回所有配置文件內容。在你的情況下,特定ID的行

相關問題