我正在尝试访问路线并通过表单工厂发布。路线或帖子中包含一个ID,我需要将其注入表单中,以便我可以构建一个select语句。
目前我正在使用控制器通过控制器注入表格
$this->MyForm->get('elementName')->setOptions(array('value_options' =>$myArrayOfOptions));
我的目标是将业务逻辑置于控制器之外,因此为什么我热衷于使用formFactory,但是我确实需要访问帖子或路由中的ID才能实现此目的。
我的表单工厂如下所示:
<?php
namespace MyModule\Form;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use AdminLottery\InputFilter\MyFilter;
use AdminLottery\Service\MyService;
class MyFormFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
*/
public function createService(
ServiceLocatorInterface $serviceLocator
)
{
//$serviceLocator is FormElementManager
$realSL = $serviceLocator->getServiceLocator();
//*** I NEED TO ACCESS THE ID / POST HERE TO SEND TO MY FORM
return new MyForm(
$realSL->get('Doctrine\ORM\EntityManager'),
$realSL->get('InputFilterManager')->get(MyFilter::class),
$realSL,
$realSL->get(MyService::class)
);
}
}
有任何想法吗??
您可以访问请求实例
MyFormFactory
//...
$request = $serviceLocator->getServiceLocator()->get('Request');
$id = $request->getPost('id', false);
if ($id) $form->setOption('id', $id);
//...
编辑:这与我回答的另一个问题非常相似
编辑2
在您的工厂中,可以通过路由器的访问路径参数Zend\Mvc\Router\RouteMatch
。
$request = $serviceLocator->getServiceLocator()->get('Request');
$router = $serviceLocator->getServiceLocator()->get('Router');
$match = $router->match($request); // \Zend\Mvc\Router\RouteMatch
$id = ($match) ? $match->getParam('id', false) : false;
if ($id) $form->setOption('id', $id); //....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句