ZF2通过工厂访问路线和帖子

Hap*_*der 2 zend-framework2

我正在尝试访问路线并通过表格工厂发布.路径或帖子包含我需要注入到我的表单中的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)

有任何想法吗??

Ale*_*exP 5

您可以访问请求实例

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)