ZF2: как создать новый экземпляр модели внутри контроллера - PullRequest
0 голосов
/ 12 сентября 2018

Я начинаю изучать преимущества внедрения зависимостей 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, который является анти-паттерном.

Я что-то упускаю из виду?

1 Ответ

0 голосов
/ 14 сентября 2018

Поскольку ваш класс Crumb является моделью, вполне допустимо создавать его экземпляр в контроллере.

В зависимости от вашего варианта использования может быть более подходящим создание новых крошек с помощью службы, например, CrumbService->create($data);. Затем вы добавили бы Сервис в Контроллер через Фабрику и соответствующим образом обновили бы конфигурацию вашего модуля (т.е. убедитесь, что ваш контроллер настроен на создание экземпляра через Фабрику, а не как вызываемый класс.

...