2017-04-17 5 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の選択肢タイプを作成し、このフォームタイプにsessionサービスを注入するために任意の場所

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; 
    } 
} 

それを使用することができ、あなたはサービスとしてそれを作成する必要があります。

<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

ここで間違いはありますか?

関連する問題