我正在为一个复杂的表格系统工作......对我而言。我按照这里的说明操作: http://symfony.com/doc/2.6/cookbook/form/form_collections.html
我的第一堂课是(像Tag):
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints AS Assert;
class TipoPermessoFerie {
protected $id;
protected $nome;
protected $descrizione;
// permesso 'T' ferie 'F'
protected $permesso;
public function getId() {
return $this->id;
}
public function setId($int) {
$this->id = $int;
}
public function setNome($nome) {
$this->nome = $nome;
return $this;
}
public function getNome() {
return $this->nome;
}
public function setDescrizione($descrizione) {
$this->descrizione = $descrizione;
return $this;
}
public function getDescrizione() {
return $this->descrizione;
}
public function setPermesso($permesso) {
$this->permesso = $permesso;
return $this;
}
public function getPermesso() {
return $this->permesso;
}
}
第二个类(如TagType):
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class TipoPermessoFerieType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('nome');
$builder->add('descrizione');
$builder->add('permesso');
$builder->add('id');
//$builder->setMethod('GET');
//$builder->add('save', 'submit', array('label' => '< Fase 2 >'));
//$builder->add('reset', 'reset', array('label' => '< Annulla >'));
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\TipoPermessoFerie',
));
}
public function getName() {
return 'TipoPermessoFerie';
}
}
第三课(如任务):
// src/appBundle/EntityForm/Form1
namespace AppBundle\EntityForm;
use Doctrine\Common\Collections\ArrayCollection;
class Form1 {
protected $descrizione;
protected $tipoPermessoFerie; // collezione di TipoPermessoFerie
// metodi
public function __construct(){
$this->tipoPermessoFerie = new ArrayCollection();
}
public function getDescrizione () {
return $this->descrizione;
}
public function setDescrizione ($de) {
$this->descrizione = $de;
}
// restituisce un ArrayCollection
public function getTipoPermessoFerie () {
return $this->tipoPermessoFerie;
}
public function setTipoPermessoFerie ($TPE) {
$this->tipoPermessoFerie = $TPE;
}
}
第四个类(如TaskType):
// src/AppBundle/Form/Type/Form1Type.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use AppBundle\EntityForm\Form1;
class Form1Type extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('descrizione');
$builder->add('tipoPermessoFerie', 'collection', array('type' => new TipoPermessoFerieType()));
$builder->setMethod('GET');
$builder->add('save', 'submit', array('label' => '< Fase 2 >'));
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array('data_class' => 'AppBundle\EntityForm\Form1',));
}
public function getName() {
return 'form1';
}
}
当我在控制器中使用这些类时......
....
$f1 = New Form1 ();
$f1->setDescrizione("Fase 1");
for ($i = 0; $i < count($tipiF); $i++) {
$f1->getTipoPermessoFerie()->add($tipiF[$i]); //$tipiF[$i]);
}
$form = $this->createForm(new Form1Type(), $f1);
dump($form->getData());
$form->handleRequest($request);
// poi bisogna validare la prima form e passare alla seconda
if ($form->isValid()) {
$fe = New Ferie ();
$dt = new \DateTime('now');
//$dt->setTimeZone(new \DateTimeZone('Europe/Rome'));
$fe->setDataRichiesta ($dt);
$fe->setAnnoRif(date('Y'));
$fe->setGiorniTurniChiesti(0);
$fe->setDataDa($dt);
$fe->setDataA($dt);
dump($form->getData());
....
表单准备工作期间的第一个dump()
,第二个我想要访问数据的时候没有...为什么?我不明白如何在控制器中使用表单日期......我需要它们在第二阶段进行可视化!
我的代码中丢失了什么吗?
我解释......更好...... 它&#39;似乎表格中没有错误! 这是错误的转储......表单错误是空的......
我可以看到dump命令返回的数据对象......但它是空的dump($form->getData()) 这是问题......这个对象必须有2行值(非空),我想知道whitch行被检查了!
我尝试在一个操作中管理两个表单是否正确?
编辑:也许我无法让我承诺...让我们从原始问题开始:我想实现一个2步骤形式(没有javascrit和其他客户端程序)....所以我想要实现两种形式......一种形式由用户获得一些日期;第二个表单显示获得的数据并向用户询问其他数据! 我该怎么做?
答案 0 :(得分:0)
$form->isValid()
通常在两种情况下失败:请求中的数据引发错误或表单尚未提交。
但我错了,如果那是因为您的表单有错误,可以使用$form->getErrors()
访问它们。
答案 1 :(得分:0)
我已经解决了......这不是一个好的解决方案,这是一个技巧。
我使用_GET ['var']查看第一个表单返回的数据。