2016-03-19 192 views
0

在ZF2中,我有一个自定义的表单元素工厂。它创建一个自定义MultiCheckbox并填充数据库查询中的复选框值和标签。ZF2,将变量传递给控制器​​的自定义元素

class MyMultiCheckboxFactory 
{ 
    public function __invoke(FormElementManager $formElementManager) 
    { 
     $multiCheck = new \Zend\Form\Element\MultiCheckbox(); 

     $serviceManager = $formElementManager->getServiceLocator(); 
     $mapper = $serviceManager->get('Path\To\Mapper\To\Query\DB'); 
     $descriptions = $mapper->findDescriptions($id); 

     // some processing to prepare $value_options array 

     $multiCheck->setOptions([ 
      'label' => 'blah-blah', 
      'value_options' => $value_options 
     ]); 

     return $multiCheck; 
    } 
} 

我的问题如下。方法findDescriptions($id)取决于我可以从路线中获得的$id。但是,当我在表单中使用MyMultiCheckbox这样的:

public function init() 
{ 
    $this->add([ 
     'type' => 'Path\To\MyMultiCheckbox', 
     'name' => 'someName' 
    ]); 
} 

我不知道如何$id传递到MyMultiCheckbox

谁能帮助pleeeeeeeeeease?

+0

遗憾的俄罗斯,但。 Соррикудапередатьтонадо? иятакпонимаюестьшаблондляэтогоелемента?当你想在你的模板中传递这个变量的时候自定义元素。 – Naumov

+0

@Naumov,嘿,没有附加到这个元素的视图脚本(如果这就是你的意思是模板;-))。表单会自动生成此元素和所有其他元素。我的观点是将这个血腥的'id'传递给这个自定义元素,这样我就不必再调整窗体和视图脚本。 –

+0

加入'value_options ['attributes'] => array('id'=>'yourId')'不会像文档中那样得到结果http://framework.zend.com/manual/current/en/modules/zend .form.element.multicheckbox.html – Naumov

回答

1

您可以通过“路由匹配”实例工厂获取ID。

$event = $serviceManager->get('Application')->getMvcEvent(); 
$id = $event->getRouteMatch()->getParam('id', false); 

if (empty($id)) { 
    throw new ServiceNotCreatedException('id not set!'); 
} 

$descriptions = $mapper->findDescriptions($id); 
+0

男人,上帝保佑你的手指那种类型和你的大脑有帮助。非常感谢,真该死! –

相关问题