Php ZF2依赖关系表单未从字段集获取字段
我正在尝试通过ZF2 FormElementManager构建表单,并遵循了web上的示例,包括Zend自己的说明: Module.phpPhp 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
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
是在索引()中定义的,但我没有发布它。从我的播放器详细信息中获取元素的方法是解决方案-谢谢!太好了,我添加了我的答案:-)