ZF2-如何将构造函数参数传递给Module.php中的服务

杰克

我有一个PHP类,该类具有一个接受参数的构造函数:

前任:

Users.php

namespace Forms;
class Users
{
  protected $userName;
  protected $userProperties = array();

  public function __construct($userName, array $userProperties = null) 
  {
     $this->userName = $userName;
     $this->userProperties = $userProperties;
  }
  public function sayHello()
  {
    return 'Hello '.$this->userName;
  }
}

现在,我试图在这样的模型文件中使用此类:

$form = new Forms\Users( 'frmUserForm', array(
            'method' => 'post',
            'action' => '/dosomething',
            'tableWidth' => '800px'
            ) );

它工作正常。但是,为了编写单元测试,我需要将其重构为服务工厂,以便对其进行模拟。

因此,我的服务工厂现在看起来像这样:

public function getServiceConfig()
    {
        return array(
            'initializers' => array(
                function ($instance, $sm)
                {
                    if ( $instance instanceof ConfigAwareInterface )
                    {
                        $config = $sm->get( 'Config' );
                        $instance->setConfig( $config[ 'appsettings' ] );
                    }
                }
            ),
            'factories' => array(
                'Forms\Users' => function ($sm )
                {
                    $users = new \Forms\Users();
                    return $users;
                },
            )
        );
    }

完成此重构后,我有两个问题:

  1. 考虑到ServiceLocator在模型文件中不可用,如何使用模型文件中的Forms \ Users服务?
  2. 在实例化模型中的Users类时,如何更改Service Factory实例以接受构造函数的参数。
kuldeep.kamboj

我有一段时间遇到类似的问题。然后,我决定不将参数传递给Factory本身。但是建立类似这样的setter方法。

namespace Forms;
class Users
{
  protected $userName;
  protected $userProperties = array();

  public function setUserName($userName) 
  {
      $this->userName = $userName;
  }
  public function setUserProperties($userProperties) 
  {
      $this->userProperties = $userProperties;
  }         
  public function sayHello()
  {
      return 'Hello '.$this->userName;
  }
}

您可以实现模型ServiceLocatorAwareInterface接口,然后它将调用以下任何服务。

use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyModel implements ServiceLocatorAwareInterface
{
    protected $service_manager;
    public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
    {
        $this->service_manager = $serviceLocator;
    }

    public function getServiceLocator()
    {
        return $this->service_manager;
    }

    public function doTask($name, $properties)
    {
        $obj =  $this->getServiceLocator('Forms\Users');
        $obj->setUserName($name);
        $obj->setUserProperties($properties);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Zf2中重用服务层?

来自分类Dev

我如何从zf2中的url获取参数?

来自分类Dev

如何在ZF2中将语言变量传递给布局?

来自分类Dev

如何使用ZF2创建SOAP服务?

来自分类Dev

ZF2:在帖子提交中传递变量

来自分类Dev

如何在ZF2中添加列以选择语句?

来自分类Dev

如何在ZF2中默认返回JsonModel?

来自分类Dev

如何在ZF2中的tableGateway中使用hading()

来自分类Dev

如何在zf2中使用辅助类?

来自分类Dev

如何在ZF2中执行“或”操作?

来自分类Dev

如何在zf2中获取最后插入的ID?

来自分类Dev

如何清除zf2中的路由错误?

来自分类Dev

如何避免ZF2中的微小路由错误

来自分类Dev

如何在ZF2中模拟PUT表单?

来自分类Dev

如何在ZF2的where中添加选择?

来自分类Dev

ZF2如何将变量传递给表单

来自分类Dev

使用ZF2框架将选项传递给php脚本

来自分类Dev

如何在ZF2的控制器的构造函数中获取标头?

来自分类Dev

ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

来自分类Dev

ZF2,将数组作为查询参数传递,尤其是在Zend \ Http \ Request中

来自分类Dev

ZF2:如何在服务中调用视图助手?

来自分类Dev

在ZF2中创建服务

来自分类Dev

ZF2中的服务是什么

来自分类Dev

如何在ZF2中全局将变量传递到layout.phtml?

来自分类Dev

zf2中每个模块的module.config.php中的不同设置

来自分类Dev

如何在PHP ZF2中加载没有命名空间的PHP库?

来自分类Dev

如何在PHP ZF2中加载没有命名空间的PHP库?

来自分类Dev

如何将值AJAX发送到ZF2中的控制器?

来自分类Dev

如何在ZF2中将侦听器代码从闭包移动到方法并将参数传递给它?

Related 相关文章

热门标签

归档