2017-09-22 91 views
0
class AnalisiType extends AbstractType { 

    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 

     if($options['data']->getIdProprietario()==NULL){ 
      $data_proprietario=''; 
     }else{ 
      $data_proprietario=$options['data']->getIdProprietario(); 
     } 
$em = $this->getDoctrine()->getEntityManager(); 
     $builder ->add('idProprietario', EntityType::class, array(
       'label' => false, 

       'placeholder' => 'Seleziona Anagrafica se presente', 
       'class' => 'AppBundle:anagrafica', 
       'query_builder' => function (anagraficaRepository $er) { 

        return $er->createQueryBuilder('u') 
       ->where('u.idTipologia = 1'); 
       }, 
       'choice_label' => 'ragione_sociale', 
         'data'=>$em->getReference("AppBundle:anagrafica",$options['data']->getIdProprietario()->getId()) , 

       'attr' => array(
        'class' => 'chosen-select' 
       ), 
      )) 

私の目標は編集フォームのデフォルトデータに設定されています。フォーラムでの検索私は見つけること私のEntityTypeフォームでdoctrineを使う方法

'データ' => $ EM-> getReference( "AppBundle:anagrafica"、$オプション[ 'データ'] - > getIdProprietario() - >のgetId())、

正しい構文ですが、私はフォームでdoctrineを使用する方法を理解していません。 このフォームはいつも私が

私が使用を追加する必要が
Attempted to call an undefined method named "getDoctrine" of class "AppBundle\Form\AnalisiType" 

をエラー与える??????

私の唯一の解決策はサービスを作成することです??あなたはsymfonyの2.8上にある場合は値

services: 
    #service_name: 
    # class: AppBundle\Directory\ClassName 
    # arguments: ['@another_service_name', 'plain_value', '%parameter_name%'] 

答えて

1

: #parameter_name:

私services.yml

http://symfony.com/doc/current/service_container.html

パラメータでのサービス、パラメータとコンテナ詳細については、こちらをご覧くださいフォームをサービスとして定義し、EntityMangerを注入する必要があります。

services: 
    form: 
     class: YourBundle\Form\Type\YourType 
     arguments: ["@doctrine.orm.entity_manager"] 
     tags: 
      - { name: form.type } 

あなたはsymfonyの3.3上にある場合、フォームはすでにサービスで、あなたは自分の構築物にEntityManagerInterfaceをtypehintことができます。

private $entityManager; 

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

はまた、あなたが3.3で自動設定を有効にしているか、あなたがしなければならないことを確認してくださいサービスとしてフォームを登録します。

services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
     public: false 

    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     exclude: '../../src/AppBundle/{Entity,Repository}' 

    AppBundle\Controller\: 
     resource: '../../src/AppBundle/Controller' 
     public: true 
     tags: ['controller.service_arguments'] 
+0

感謝の助けのため..私はsymfony 3.3を持っていますが、今私は、このエラーキャッチできる致命的なエラーを持っている:AppBundle \フォーム\ AnalisiTypeに渡される引数1 :: __構築物()は、インターフェイスの教義を実装する必要があります\ ORM \ EntityManagerInterface、 Doctrine \ ORM \ EntityManagerInterfaceを追加しました。 –

+0

@FrancescoArreghini残りのエラーは何ですか? – kunicmarko20

+0

キャッチ可能な致命的なエラー:引数1をAppBundle \ Form \ AnalisiType :: __ construct()に渡すと、Doctrine \ ORM \ EntityManagerInterfaceインターフェイスが実装されていなくても、C:\ xampp \ htdocs \ richiesta_analisi \ vendor \ symfony \ symfony \ src \ Symfony \ Component \ Form \ FormRegistry.php 85行目に定義されていて、 –

関連する問題