2013-01-06 3 views
0

Symfony2에서 내 개체 중 하나에 대해 CRUD가 있습니다. I가 외부로부터 설정 될 원하기 때문에 각 때문에, I는 newAction() 함수에 $ 번호 입력 매개 변수를 추가 이전 코드에서Symfony2 - 외부에서 하나의 양식 매개 변수를 설정하여 사용자가 수정할 수 없습니다.

public function newAction($id) { 

    $entity = new Clientes(); 

    // Get the reference to the Login entity using its ID 
    $em = $this->getDoctrine()->getManager(); 
    $ref_login = $em->getReference('LoginBundle:Login', $id);  

    // Put the retrieved reference to the entity 
    $entity->setLogin($ref_login); 

    $form = $this->createForm(new ClientesType(), $entity); 

    return $this 
      ->render('MovinivelBundle:Persona/Clientes:new.html.twig', 
        array('entity' => $entity, 
          'form' => $form->createView(),)); 
} 

public function createAction(Request $request) { 

    $entity = new Clientes(); 

    $form = $this->createForm(new ClientesType(), $entity); 
    $form->bind($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager();    

     $em->persist($entity); 
     $em->flush(); 

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

    return $this 
      ->render('MovinivelBundle:Persona/Clientes:new.html.twig', 
        array('entity' => $entity, 
          'form' => $form->createView(),)); 
} 

: 새로운 항목을 생성하기 위해 I, 두 제어기 기능을 가지고 이 Clientes의 로그인 정보는 추가 정보이며 링크되어야합니다.

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('login') 
     ->add('direccion') 
     ->add('localidad') 
     ->add('provincia') 
     ->add('telefono') 
    ; 
} 

을 지금까지 작동 다음 ClientesType 양식에서

나는 다음 있습니다. 내 양식에서 login 매개 변수는 $ id 값에 따라 선택됩니다. 하지만 일단 양식을 작성하면 로그인 매개 변수를 수정하여 사용자가 양식에서 수정할 수 없으며 적절한 값으로 newAction ($ id) 함수 만 호출 할 수 있도록해야합니다.

FormType에서 -> add ('login') 행을 삭제하면 더 이상 작동하지 않습니다. 그것은 내 마음에 두 가지 옵션이 제공 : 어떻게 든 형태로 '로그인'

  • 숨기기,하지만 난 방법을 알고, 또는 $ id 매개 변수를 따라 createAction에
  • 통과하지 않지만 그것은 작동되어 유지 $ 요청 하나를 입력 매개 변수로 사용하는 방법을 알아낼 수는 없습니다.

이 문제에 대한 의견이 있으십니까?

답변

0

좋아, 내가 솔루션을 나왔다. 그 동안 여전히

<div style="display:none"> 
{{ form_rest(form) }} 
</div> 

다른 양식 필드 내가 원하지 않는 필드를 수정하는 모든 사용자를 방지 명시 적으로 표시 한 후 템플릿의 끝이 타이핑 : 내가 찾던 모든는 다음과 실제로 $ POST 메서드를 사용하여 정보를 보냅니다.

0

나는 당신이 hidden 필드 유형을 찾고 있습니다 생각 :

public function buildForm(...) 
{ 
    $builder 
     ->add('login', 'hidden') 
     // ... 
    ; 
} 
+0

폼을 렌더링하기 전에 다음 오류가 발생합니다. 폼의 뷰 데이터는 스칼라, 배열 또는 \ ArrayAccess 인스턴스가 될 것으로 예상되지만 Proxies 클래스 __ CG __ \ Login \ 인스턴스의 인스턴스입니다. LoginBundle \ Entity \ Login. "data_class"옵션을 "Proxies \ __ CG __ \ Login \ LoginBundle \ Entity \ Login"으로 설정하거나 Proxies \ __ CG __ \ Login \ LoginBundle \ Entity \ Login 클래스의 인스턴스를 다음으로 변환하는 뷰 변환기를 추가하여이 오류를 피할 수 있습니다. 스칼라, 배열 또는 \ ArrayAccess의 인스턴스 –

+0

@Vynith 그것은 잘못된 타입이 아니기 때문에가 아니라 Symfony2.1에서 엔티티를 사용한다면'Type' 클래스에'data_class' 옵션을 설정해야하기 때문입니다. 추가 정보 : http://stackoverflow.com/a/10903756/1149495 –

+1

추가 : ('로그인', '숨김', 배열 ('data_class'=> '로그인 \ LoginBundle \ Entity \ Login'))하지만 지금은 양식을 보낸 후 이번에는 다른 오류가 발생합니다 : 경고 : spl_object_hash()는 매개 변수 1이 객체가 될 것으로 기대합니다./Users/luis/www/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork .php line 1358 –