Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 将表单从Symfony2转换为Symfony3_Forms_Symfony - Fatal编程技术网

Forms 将表单从Symfony2转换为Symfony3

Forms 将表单从Symfony2转换为Symfony3,forms,symfony,Forms,Symfony,我想将这样的表单转换为符合Symfony3代码: $form = $this->createForm(new AjoutQC(array('idcolle' => $idColle,'idqc' => $question->getId())), $question, array('action' => $this->generateUrl('

我想将这样的表单转换为符合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...

经过一些研究,我没有找到任何关于它的信息。

在Symfony 3中,您需要使用(完全限定的类名),而不是表单的实例(或对服务的字符串引用)

AjoutQC
类中,您需要转到
configureOptions
方法并添加
idcole
idqc
选项:

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

在symfony3中,您需要使用(完全限定类名),而不是表单实例(或服务的字符串引用)

AjoutQC
类中,您需要转到
configureOptions
方法并添加
idcole
idqc
选项:

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
            )
        );
    }        
}
检查这些升级表单

它说:

不再支持将类型实例传递给Form::add()、FormBuilder::add()和FormFactory::create*()方法。改为传递类型的完全限定类名

之前:

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

$form = $this->createForm(new MyType());
$form = $this->createForm(MyType::class);
您可以使用并传递数据
数组('idcole'=>$idcole,'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'));
}
这将根据需要设置
idcole
idqc
选项,这些选项必须传递给您的表单类型(
AjoutQC
)。

检查这些表单升级

它说:

不再支持将类型实例传递给Form::add()、FormBuilder::add()和FormFactory::create*()方法。改为传递类型的完全限定类名

之前:

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

$form = $this->createForm(new MyType());
$form = $this->createForm(MyType::class);
您可以使用并传递数据
数组('idcole'=>$idcole,'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'));
}

这将根据需要设置
idcole
idqc
选项,这些选项必须传递给您的表单类型(
AjoutQC
)。

如果您只是想知道
::class
表示法,您可以在此处找到相关信息:

::类
要求php>=5.5


如果您正在使用如果您只是想知道
::class
符号,您可以在此处找到有关该符号的信息:

::类
要求php>=5.5


如果您正在使用,有一些关于包含工具的提示,也有一些关于包含工具的提示,这对我的所有表单都有效,但有一个表单会向我抛出以下错误:警告:非法字符串偏移<代码>公共函数buildForm(FormBuilderInterface$builder,array$options){$builder->add('nom',TextType::class,array('disabled'=>this->options['modificationInterdite']))公共函数配置选项(选项解析器$resolver){$resolver->setRequired(array('modificationInterdite'));$resolver->setDefaults(数组('modificationInterdite'=>false));}你应该用你的完整代码为此打开一个新问题。我相信你要么错过了
FormType
中的一个字段,要么如果你嵌入了sub
FormType
s,你可能也必须检查它们。这对我所有的表单都有效,但有一个表单会给我带来这个错误:警告:非法字符串偏移。
public函数buildForm(FormBuilderInterface$builder,array$options){$builder->add('nom',TextType::class,array('disabled'=>this->options['modificationInterdite']))公共函数配置选项(选项解析器$resolver){$resolver->setRequired(array('modificationInterdite'));$resolver->setDefaults(数组('modificationInterdite'=>false));}
你应该用你的完整代码为这个问题打开一个新的问题。我相信你要么错过了
表单类型
中的一个字段,要么如果你嵌入了子
表单类型
s,你可能也必须检查它们。