Forms 将表单从Symfony2转换为Symfony3
我想将这样的表单转换为符合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('
$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
中的一个字段,要么如果你嵌入了subFormType
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,你可能也必须检查它们。