ZF2:如何在控制器内创建模型的新实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZF2:如何在控制器内创建模型的新实例相关的知识,希望对你有一定的参考价值。
我开始学习ZF2依赖注入的好处,并且对如何在控制器内创建模型的新实例感到有点困惑。
我知道我可以使用:$ this-> getServiceLocator() - > get('Crumb'),但我读过它被认为是在控制器中使用serviceLocator的反模式。
为了解决这个问题:我有一个类Breadcrumbs和一个类Crumb。它看起来类似于:
class Breadcrumbs
{
private $crumbs = array();
public function getCrumbs(){
return $this->crumbs;
}
public function addCrumb(Crumb $crumb){
$this->crumbs[] = $crumb;
}
}
class Crumb
{
private $title;
private $url;
public function setTitle($title){
$this->title = $name;
}
}
class DetailController extends AbstractActionController
{
private $breadcrumbs;
public function __construct(Breadcrumbs $breadcrumbs){
$this->breadcrumbs = $breadcrumbs;
}
public function indexAction(){
$crumb = new Crumb(); //Option 1
$crumb = $this->getServiceLocator()->get('Crumb'); //Option 2
$crumb = ?? //Option 3 ??
$this->breadcrumbs->addCrumb($crumb);
}
}
我很困惑如何创建Crumb的实例。如果我遵循选项1,我不能使用工厂将任何依赖项注入到Crumb中。如果我按照选项2,我使用serviceLocator这是一个反模式。
我错过了什么明显的东西?
答案
由于您的Crumb类是一个模型,因此在Controller中实例化它是完全可以接受的。
根据您的使用情况,通过服务创建新的Crumbs可能更合适,例如: CrumbService->create($data);
。然后,您可以通过Factory将服务注入Controller,并相应地更新模块配置(即确保您的控制器设置为通过工厂而不是可调用的类实例化。
以上是关于ZF2:如何在控制器内创建模型的新实例的主要内容,如果未能解决你的问题,请参考以下文章