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

HappyCoder

我正在尝试访问路线并通过表单工厂发布。路线或帖子中包含一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章