2011-09-15 9 views
2

次のように私はprofileTypeがあります:Symfony2モデルのデータをフォームにあらかじめ入力していますか?

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

また、URLからあなたの行動にスラグとして$ IDを渡してみてください

find($id) 

によって

findOneByUser($id) 

を交換してください。 url:example.com/page/id

0

フォームが実際に送信された場合にのみ、リクエストをフォームにバインドする必要があります。

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

$ editprofileをダンプし、返す内容を確認して、すべてのプロファイルの内容を返すようにしてください。あなたのケースで特定のIDの行

関連する問題