我们在AbstractType
的实现中构建表单。现在我们要检索在builderForm中定义的字段。我找不到任何关于如何做到这一点的文档,虽然我希望负责输出表单的Symfony部分也必须这样做。
class BlaType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('bla', 'checkbox', array('label' => 'bla', 'required' => true))
->add('submit', 'submit', array(
'label' => 'bla',
'attr' => array('class' => 'btn btn-primary')))
;
}
}
答案 0 :(得分:1)
好吧,正如我的评论中所述,我将向您展示一种使用name => type
生成数组的方法(我想可能有不止一种方法,但是现在这可以解决问题)。< / p>
我创建了一个包含更多字段的简单表单,如下所示:
<?php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text')
->add('description', 'textarea')
->add('isActive', 'checkbox')
->add('published', 'datetime')
->add('save', SubmitType::class)
;
}
}
然后在您的控制器中,在创建表单后抓住Form
实例非常重要,例如$builder = $this->createForm(new ArticleType());
从那里,您可以访问您的子元素:
public function indexAction(Request $request)
{
$builder = $this->createForm(new ArticleType());
// $builder -> Symfony\Component\Form\Form
// It's important to access the children array before the form is being normalized.
// Otherwise you will gen an error as follows: FormBuilder methods cannot be accessed anymore once the builder is turned into a FormConfigInterface instance
$fields = array();
foreach($builder->all() as $name => $child) {
// $child -> Symfony\Component\Form\Form
// $child->getConfig() -> Symfony\Component\Form\FormBuilder
// $child->getConfig()->getType() -> Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy
$fields[ $name ] = $child->getConfig()->getType()->getName();
}
var_dump($fields);
}
转储我们刚刚创建的数组,你应该得到一个像这样的输出:
array (size=5)
'title' => string 'text' (length=4)
'description' => string 'textarea' (length=8)
'isActive' => string 'checkbox' (length=8)
'published' => string 'datetime' (length=8)
'save' => string 'submit' (length=6)
那是我的,希望这会有所帮助。
答案 1 :(得分:0)
从表单中获取数据
$ form-&gt; get('bla') - &gt; getData()