我正在尝试访问路线并通过表格工厂发布.路径或帖子包含我需要注入到我的表单中的ID,以便我可以构建一个select语句.
目前我通过控制器使用注入表单
$this->MyForm->get('elementName')->setOptions(array('value_options' =>$myArrayOfOptions));
Run Code Online (Sandbox Code Playgroud)
我的目标是将业务逻辑保持在控制器之外,因此我热衷于使用formFactory,但是我确实需要访问post或route中的ID来实现这一点.
我的Form Factory看起来像这样:
<?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)
);
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗??
您可以访问请求实例
MyFormFactory
//...
$request = $serviceLocator->getServiceLocator()->get('Request');
$id = $request->getPost('id', false);
if ($id) $form->setOption('id', $id);
//...
Run Code Online (Sandbox Code Playgroud)
编辑:这与我回答的另一个问题非常相似
编辑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); //....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |