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
$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
服务?如果是,您能否将配置添加到问题中?