gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:00:38 26 4
gpt4 key购买 nike

我正在尝试访问路由并通过表单工厂发布。路由或帖子包含一个 ID,我需要将该 ID 注入(inject)到我的表单中,以便我可以构建一个选择语句。

目前我正在使用

通过 Controller 注入(inject)表单
$this->MyForm->get('elementName')->setOptions(array('value_options' =>$myArrayOfOptions));

我的目标是将业务逻辑保留在 Controller 之外,因此我热衷于使用 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)
);
}
}

有什么想法吗??

最佳答案

可以访问请求实例

我的表单工厂

//...
$request = $serviceLocator->getServiceLocator()->get('Request');

$id = $request->getPost('id', false);

if ($id) $form->setOption('id', $id);

//...

编辑: 这与 another question I answered 非常相似

编辑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); //....

关于zend-framework2 - ZF2 通过工厂访问路线和帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24057638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com