Php ZF2依赖关系表单未从字段集获取字段

Php ZF2依赖关系表单未从字段集获取字段,php,forms,zend-framework2,Php,Forms,Zend Framework2,我正在尝试通过ZF2 FormElementManager构建表单,并遵循了web上的示例,包括Zend自己的说明: Module.php use Zend\ModuleManager\Feature\FormElementProviderInterface; use Application\Form\PlayerFieldset; class Module implements FormElementProviderInterface { public function getFo

我正在尝试通过ZF2 FormElementManager构建表单,并遵循了web上的示例,包括Zend自己的说明:

Module.php

use Zend\ModuleManager\Feature\FormElementProviderInterface;
use Application\Form\PlayerFieldset;

class Module implements FormElementProviderInterface
{
    public function getFormElementConfig()
    {
        return array(
            'factories' => array(
                'PlayerFieldset' => function ($sm) {
                    return new Form\PlayerFieldset();
                },
            ),
        );
    }
}
IndexController.php

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        $formManager = $sm->get('FormElementManager');
        $form = $formManager->get('Application\Form\PlayerForm');

        $formViewObj = new ViewModel(array('form' => $form));
        $formViewObj->setTemplate('application/widgets/form.phtml');
        return $formViewObj;
    }
}
playexper.php

use Zend\Form\Form;

class PlayerForm extends Form
{
    public function init()
    {               
        $this->add(array(
            'name' => 'playerdetails',
            'type' => 'PlayerFieldset',
        ));
    }
}
PlayerFieldset.php

class PlayerFieldset extends Fieldset implements ServiceLocatorAwareInterface
{   
    protected $serviceLocator;

    public function init()
    {       
        parent::__construct('Player');
        $this->setHydrator(new ClassMethodsHydrator(false))
            ->setObject(new Player());
        $sm = $this->getFormFactory()->getFormElementManager()->getServiceLocator();
        $msi = $sm->get('MyServiceInterface');
        $elements = $msi->request('FieldManager','getFieldsByEntity','Player');

        // Add fields to fieldset
        foreach ($elements as $element) {
            $this->add($element);
        }                       
    }
}
PlayerFieldset.php
的末尾,元素已添加到
$this
(我可以通过调用
$this->getElements();
并打印结果来查看这一点

但是,回到
IndexController.php
中,
$form
对象没有附加my元素

有人能帮我解释一下原因吗?

表单中没有字段集将包含的元素

因此,与形式元素不同:

$form->getElements();
您需要首先获取
playerdetails
fieldset,然后返回它的元素

$form->get('playerdetails')->getElements();

是否有错误?
$sm
未在
索引()中定义
$sm=$this->getServiceLocator();
您需要将
$sm=$this->getServiceLocator();
添加到该方法的顶部。此外,表单不会包含字段集将包含的元素-
$form->get('playerdetails')->getElements()
谢谢您的评论。
$sm
是在
索引()中定义的,但我没有发布它。从我的
播放器详细信息中获取元素的方法是解决方案-谢谢!太好了,我添加了我的答案:-)