2017-04-17 39 views
0

如何創建一個字段(下拉列表),其中Pracownik列表由idPlachta(會話變量)顯示?

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,我可以在我的控制器中使用它 public function 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

哪裏錯了?