Php zend framework 2控制器工厂条件加载

Php zend framework 2控制器工厂条件加载,php,zend-framework2,lazy-loading,Php,Zend Framework2,Lazy Loading,我正在寻找一种通过工厂处理控制器创建的正确方法(以避免对控制器本身中的服务的严格依赖,从而允许单元测试) 我有一个控制器,有两个动作: 搜索表单提交,其中我仅使用带验证程序的Zend表单 要确定是否向其发送了有效的查询,如果是, 重定向以显示结果操作 显示结果-我使用 与斯芬克斯对话搜索 现在,我创建控制器的工厂如下所示: $ctrl = new Album\Controller\SearchController(); $ctrl->setSearchForm(new Album\Form

我正在寻找一种通过工厂处理控制器创建的正确方法(以避免对控制器本身中的服务的严格依赖,从而允许单元测试)

我有一个控制器,有两个动作:

  • 搜索表单提交,其中我仅使用带验证程序的Zend表单 要确定是否向其发送了有效的查询,如果是, 重定向以显示结果操作

  • 显示结果-我使用 与斯芬克斯对话搜索

  • 现在,我创建控制器的工厂如下所示:

    $ctrl = new Album\Controller\SearchController();
    $ctrl->setSearchForm(new Album\Form\SearchForm());
    $ctrl->setSearchEntity(new Album\Model\Search());
    $sphinxqlAdapter = $serviceLocator->getServiceLocator()->get('SphinxSearch\Db\Adapter\Adapter');
    $ctrl->setSphinxqlAdapter($sphinxqlAdapter);
    $ctrl->setSphinxqlMatch($serviceLocator->getServiceLocator()->get('sphinxqlMatch'));
    $ctrl->setSphinxqlSearch($serviceLocator->getServiceLocator()->get('SphinxQlSearchFactory'));
    return $ctrl;
    
    问题是,即使是我的第一个操作(即简单的表单验证+重定向)也会为Sphinx注入所有类并准备好使用。。。但它们在那里是无用的。我尝试使用这里所述的惰性服务,它适用于我的“sphinxqlMatch”服务-在调用表单操作时不会实例化此类。SphinxSearch\Db\Adapter\Adapter存在问题,因为它使用工厂来创建用于运行SphinxQL服务的数据库适配器。虽然我没有得到异常,但我检查了适配器是否立即实例化,这样就不会发生代理

    任何人都有懒惰服务的经验,以及如何让它与工厂协同工作?或者其他一些模式在这里更好-请提供提示/解决方案


    我知道我可以选择将这两个操作划分为单独的控制器作为最终手段,但对我来说,搜索表单提交例程和显示搜索结果在逻辑上结合在一起是有意义的:)

    您是否尝试用自己的惰性配置覆盖
    SphinxSearch\Db\Adapter\Adapter
    服务?如果是,您能否将配置添加到问题中?