2017-04-17 6 views
0

하나의 필드 (드롭 다운 목록)를 만드는 방법 idPlachta (세션 변수)에 의해 Pracownik의 목록이 표시되는 하나의 필드 (드롭 다운 목록)를 만드는 방법은 무엇입니까?

public function buildForm(FormBuilderInterface $builder, array $options){ 
    $session = $options['session']; 

    $builder 
     ->setMethod('GET') 
     ->add('idPracownik'); //this place 
} 


public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\Przydzial', 
     'session' => null, 
    )); 
} 


public function getBlockPrefix() 
{ 
    return 'appbundle_przydzial'; 
} 

답변

0

당신은 당신의 자신의 pracownik 선택 유형을 작성하고

class PracownikChoiceType extends AbstractType 
{ 
    /** 
    * @var SessionInterface 
    */ 
    private $session; 

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

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver 
      ->setDefault('class', 'Your\Entity\ClassName') 
      ->setDefault('query_builder', function (EntityRepository $repository) { 
       $queryBuilder = $repository->createQueryBuilder('o'); 

       $queryBuilder 
        ->select('o') 
        ->where($queryBuilder->expr()->eq('o.plachtaId', ':id')) 
        ->setParameter('id', $this->session->get('idPlachta')) 
       ; 

       return $queryBuilder; 
      }) 
     ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getParent() 
    { 
     return EntityType::class; 
    } 
} 

이 양식 유형에 session 서비스를 주입 할 경우, 당신은 서비스로 작성해야합니다 어떤 사용할 수 있습니다 :

<service id="your.service.id" class="Your\Namespace\Form\Type\PracownikChoiceType"> 
    <argument type="service" id="session" /> 

    <tag name="form.type" /> 
</service> 

이제이 양식 유형을 사용하여 어디서도 $choices 목록을 작성할 필요가 없습니다.

// Usage with `FormInterface` instance 
$form 
    ->add('plachta', PracownikChoiceType::class, array(
     'label' => 'Plachta', 
     'attr' => array(
      'class' => 'form-control', 
      'style' => 'margin-bottom: 15px' 
     ) 
    )) 
; 

// Usage with `FormBuilderInterface` instance 
$formBuilder 
    ->add('plachta', PracownikChoiceType::class, array(
     'label' => 'Plachta', 
     'attr' => array(
      'class' => 'form-control', 
      'style' => 'margin-bottom: 15px' 
     ) 
    )) 
; 
+0

확인. 이 코드에서 세션을 만들고 있는데 https://pastebin.com/khzjkeaP와 내 컨트롤러에서 사용할 수 있습니다. 공개 함수 indexAction (Request $ request) { $ plachta = $ request-> getSession() - > get ('plachta'); 코드에서이 세션을 어떻게 사용합니까? 죄송합니다, 저는 초급입니다 – wluczykuj

+0

@wluczykuj 예를 들어서 나의 업데이트 된 답변을보십시오. –

+0

좋아, 지금 시도해 보겠습니다 – wluczykuj

0

그래서 해 보았습니다. 내가 가진 서비스 :

# app/config/services.yml 

    form.type.przydzial: 
     class: AppBundle\Form\PrzydzialType 
     arguments: ['@session'] 
     tags: 
      - { name: form.type.przydzial } 

내 코드 : https://pastebin.com/G6RCKMQD

경고 :

Catchable Fatal Error: Argument 1 passed to AppBundle\Form\PrzydzialType::__construct() must be an instance of AppBundle\Form\SessionInterface, none given, called in G:\Xampp\htdocs\projects\godziny_inz\vendor\symfony\symfony\src\Symfony\Component\Form\FormRegistry.php on line 85 and defined

에서 SRC \ AppBundle \ 양식 \ PrzydzialType.php 라인에서 25

*/ 
    private $session; 
    public function __construct(SessionInterface $session) //LINE 25 
    { 
     $this->session = $session; 
    } 

및 사진 "어떻게 작동할까요?" http://imgur.com/a/dNCzP

어디서 실수입니까?