我开始学习 ZF2 依赖注入的好处,并且对如何在控制器内创建模型的新实例有点困惑。
我知道我可以使用:$this->getServiceLocator()->get('Crumb'),但我读过它被认为是在控制器中使用 serviceLocator 的反模式。
把这个问题变成现实:我有一个面包屑类和一个面包屑类。它看起来类似于:
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,它是一种反模式。
我错过了什么明显的东西吗?