Symfony2 - 在控制器/服务中获取表单元素标签和类型

ex3*_*x3v 0 php forms symfony

Symfony2 2.3.13迭代元素时形成,例如这样:

$children = $form->all();

foreach($children as $name => $child){
    $child; // ->getLabel() ?
}
Run Code Online (Sandbox Code Playgroud)

没有getLabel()方法,也没有getType(),我也需要.做的时候:

echo get_class($child);
Run Code Online (Sandbox Code Playgroud)

我总是得到

Symfony\Component\Form\Form
Run Code Online (Sandbox Code Playgroud)

有没有办法获得标签和类型?

更新

我试图做@Thomas Kelley提出的建议:

    $children = $form->all();
    foreach($children as $name => $child){
        echo '<pre>'; 
        var_dump($child->getType());
        echo '</pre>';
    }
Run Code Online (Sandbox Code Playgroud)

以上代码导致:

Error: Call to undefined method Symfony\Component\Form\Form::getType()
Run Code Online (Sandbox Code Playgroud)

Tho*_*ley 5

$form->all()返回一个数组FormInterface.

您可以FormInterface通过getConfig()方法访问该配置,该方法返回一个FormConfigInterface.从那里,您可以访问类型和标签:

$children = $form->all();
foreach ($children as $child) {

    /** @var FormInterface $child */

    /** @var FormConfigInterface $config */
    $config = $child->getConfig();

    /** @var ResolvedFormTypeInterface */
    $type = $config->getType();

    /** @var string $label */
    $label = $config->getOption("label");
}
Run Code Online (Sandbox Code Playgroud)

(注意getType()返回a ResolvedFormTypeInterface)