В настоящее время я пытаюсь изучить Zend Framework и поэтому купил книгу «Zend Framework в действии».
В главе 3 представлены базовая модель и контроллер, а также модульные тесты для них обоих. Базовый контроллер выглядит следующим образом:
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->title = 'Welcome';
$placesFinder = new Places();
$this->view->places = $placesFinder->fetchLatest();
}
}
Places
- это класс модели, который выбирает последние места из базы данных. Что меня здесь беспокоит: как мне проверить IndexController
в изоляции ? Поскольку ссылка на класс Places
является «жестко закодированной», я не могу вставить любые заглушки или макеты в IndexController
.
То, что я хотел бы иметь, выглядит примерно так:
class IndexController extends Zend_Controller_Action
{
private $placesFinder;
// Here I can inject anything: mock, stub, the real instance
public function setPlacesFinder($places)
{
$this->placesFinder = $places;
}
public function indexAction()
{
$this->view->title = 'Welcome';
$this->view->places = $this->placesFinder->fetchLatest();
}
}
Первый пример кода, который я разместил, определенно НЕ подходит для модульного тестирования, так как IndexController
нельзя протестировать изолированно. Второй намного лучше. Теперь мне просто нужен какой-то способ внедрить экземпляры модели в объекты контроллера.
Я знаю, что Zend Framework сам по себе не имеет компонента для внедрения зависимостей. Но есть несколько хороших фреймворков для PHP, могут ли они использоваться вместе с Zend Framework? Или есть какой-то другой способ сделать это в Zend Framework?