У меня есть абстрактный базовый класс Controller, и все контроллеры действий получены из него.
Базовый класс Controller при построении инициализирует объект View. Этот объект View используется всеми контроллерами действий. Каждый контроллер действий имеет разные зависимости (это решается с помощью контейнера DI).
Проблема в том, что базовому классу Controller также нужны некоторые зависимости (или параметры),
например, путь для просмотра папки. И вопрос - где и как передать параметры в базовый класс Controller?
$dic = new Dic();
// Register core objects: request, response, config, db, ...
class View
{
// Getters and setters
// Render method
}
abstract class Controller
{
private $view;
public function __construct()
{
$this->view = new View;
// FIXME: How / from where to get view path?
// $this->view->setPath();
}
public function getView()
{
return $this->view;
}
}
class Foo_Controller extends Controller
{
private $db;
public function __construct(Db $db)
{
$this->db = $db;
}
public function barAction()
{
$this->getView()->some_var = 'test';
}
}
require_once 'controllers/Foo_Controller.php';
// Creates object with dependencies which are required in __construct()
$ctrl = $dic->create('Foo_Controller');
$ctrl->barAction();