2016-03-08 117 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)。