2016-03-08 79 views
1

我想改變這樣的形式以符合Symfony3代碼:變換形式Symfony3

$form = $this->createForm(new AjoutQC(array('idcolle' => $idColle,'idqc' => $question->getId())), 
           $question, 
           array('action' => $this->generateUrl('paces_colle_qc_update', 
                    array(
                      'id' => $question->getId(), 
                      'idColle' => $idColle, 
                      'idTuteur' => $idTuteur) 
                    ), 
            'method' => 'PUT', 
          )); 

    $form->add('submit', SubmitType::class, array('label' => 'Sauvegarder')); 

Symfony3問類似:

AjoutQC::class 

代替:

new AjoutQC... 

經過一番研究,我沒有找到任何有關它的信息。

+0

在https://knpuniversity.com/screencast/symfony3-upgrade上有一些提示,包括工具[Symfony Upgrade Fixer](https://github.com/umpirsky/Symfony-Upgrade-Fixer)和[deprecation detector ](HTTPS:// github上。com/sensiolabs-de/deprecation-detector) –

回答

1

在Symfony 3中,您需要使用FQCN(完全限定類名),而不是表單實例(或對服務的字符串引用)。

$form = $this->createForm(
    AjoutQC::class, 
    $question, 
    array(
     'action' => $this->generateUrl(
      'paces_colle_qc_update', 
      array(
       'id'  => $question->getId(), 
       'idColle' => $idColle, 
       'idTuteur' => $idTuteur 
      ) 
     ), 
     'method' => 'PUT', 
     'idColle' => $idColle, 
     'idQc' => $question->getId() 
    ) 
) 

在你AjoutQC類,你需要去您的configureOptions方法並添加idcolleidqc選項:

class AjoutQC extends AbstractType { 
    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setRequired(array('idColle','idQc')); 
     $resolver->setDefaults(
      array(
       'data_class' => 'Your\Entity\Path', 
       'idColle' => null, 
       'idQc'  => null 
      ) 
     ); 
    }   
} 
+0

這對我所有的表單都有效,但是它會拋出這個錯誤:警告:非法字符串偏移量。 ('nom',TextType :: class,array('disabled'=> $ this-> options ['modificationInterdite'])public function buildForm(FormBuilderInterface $ builder,array $ options) {$ builder - > add ) public function configureOptions(OptionsResolver $ resolver){ $ resolver-> setRequired(array('modificationInterdite')); $ resolver-> setDefaults(array( 'modificationInterdite'=> false )); }' –

+0

您應該用完整的代碼爲此打開一個新問題。我相信你在'FormType'中錯過了一個字段,或者如果你嵌入了子FormType,你可能也必須經歷它們。 – tftd

3

檢查這些升級notes的形式。

它說:

傳遞類型實例到窗體:: Add()方法,FormBuilder :: add()和在FormFactory ::創建*()方法不再被支持。改爲傳遞類型的全限定類名稱。

前:

$form = $this->createForm(new MyType()); 

後:

$form = $this->createForm(MyType::class); 

您可以使用OptionsResolver,並通過數據array('idcolle' => $idColle,'idqc' => $question->getId())您當前正在傳遞到您的表單類型作爲第三個參數到createForm方法:

$form = $this->createForm(AjoutQC::class, $question, array(
    'action' => $this->generateUrl('paces_colle_qc_update', array(
     'id' => $question->getId(), 
     'idColle' => $idColle, 
     'idTuteur' => $idTuteur, 
    )), 
    'method' => 'PUT', 
    'idcolle' => $idColle, 
    'idqc' => $question->getId(), 
)); 

然後在你的AjoutQC類型,你需要做的是這樣的:

use Symfony\Component\OptionsResolver\OptionsResolver; 

// ..  

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $this->idcolle = $options['idcolle']; 
    $this->idqc = $options['idqc']; 

    $builder 
     ->add(...) 
     // .. 
    ; 
} 

// .. 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setRequired(array('idcolle', 'idqc')); 
} 

這將設置idcolleidqc所需選項,必須傳遞到你的表單類型(AjoutQC)。