2012-06-11 3 views
2

symfony2에서 양식 필드를 미리 채 웁니다. URL은 내가 여기사용 양식 미리 채우기 데이터 가져 오기

6. 형태로 projectId을 설정 해주기 원하는이

http://localhost/Symfony/web/app_dev.php/clearance/new?projectId=6 

처럼 보이는 것은 내 컨트롤러 코드

public function newclearanceAction(){ 
    $request = $this->getRequest(); 
    $id = $request->query->get('projectId'); 

    echo $id; //this works, but how to send it to the form????? 

    $clearance = new Clearance(); 
    $form = $this->createForm(new ClearanceType(), $clearance); 

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

      if($form->isValid()) { 
        $em = $this->getDoctrine()->getEntityManager(); 
        $em->persist($clearance); 
        $em->flush(); 
        return $this->redirect($this->generateUrl('MyReportBundle_project_list')); 
      } 
    } 
    return $this->render('MyReportBundle:Clearance:new.html.twig',array('form'=>$form->createView())); 

입니다 그리고 여기 형태로보기

코드입니다
<form action="{{ path('MyReportBundle_clearance_new') }}" method="post" > 
     {{ form_errors(form) }} 
     {{ form_rest(form) }} 
    <input type="submit" /> 
</form> 

어떤 도움을 주셔서 감사합니다!

답변

4

귀하의 통관 엔티티에 관련된 프로젝트가 있는지 여부에 따라 다릅니다. 그럴 경우 다음과 같이 할 수 있습니다 :

$request = $this->getRequest(); 
$id = $request->query->get('projectId'); 
$em = $this->getDoctrine()->getEntityManager(); 
$project = $em->getRepository("MyReportBundle:Project")->find($id) 
$clearance = new Clearance(); 
$clearance->setProject($project); 
$form = $this->createForm(new ClearanceType(), $clearance); 

이렇게하면 허가 오브젝트에 프로젝트가 설정되고 양식으로 전달됩니다.

현재 Symfony2에서 엔티티에 숨겨진 필드를 사용할 수 없으므로 현재 수정 된 사항은 쿼리 빌더 인스턴스를 만들고 양식에 전달하여 100 개 이상의 프로젝트가있을 때 프로젝트의 양식 선택이 우스꽝스럽지 않게하는 것입니다. .

$request = $this->getRequest(); 
$id = $request->query->get('projectId'); 
$em = $this->getDoctrine()->getEntityManager(); 

$repo = $em->getRepository("MyReportBundle:Project"); 
$project = $repo->find($id) 
//create the query builder 
$query_builder = $repo->createQueryBuilder('p') 
    ->where('p.id = :id') 
    ->setParameter('id', $project->getId()); 

$clearance = new Clearance(); 
$clearance->setProject($project); 
//pass it through 
$form = $this->createForm(new ClearanceType($query_builder), $clearance); 

를 양식 클래스 : 액션에서이 작업을 수행하려면 내가 추가

protected $query_builder; 

public function __construct($query_builder) 
{ 
    $this->query_builder = $query_builder; 
} 

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     ->add('Your field') 
     // all other fields 
     // Then below the query builder to limit to one project 
     ->add('project', 'entity', array(
      'class' => 'MyReportBundle:Project', 
      'query_builder' => $this->query_builder 
     )) 
    ; 
} 
+0

GREAT! 그게 효과가 있었어 :-) – mbs

+0

다행 이었어. 확장 성을위한 편집을 추가했습니다. 만약 내가 당신에게 도움이 될 수 있다면 그것을 조언 할 것입니다. – Luke

+0

매핑 된 필드가 작동하지 않는 것 같습니다. 권리 ? – Hpatoio

관련 문제