Существует не менее трех методов: Zend\Di, ConfigAwareInterface и ControllerFactory - Я рассмотрел возможность ввода конфигурации в контроллеры.ZF2: Конфигурация, специфичная для инъекций, в контроллер
В more or less official recommendation is the ControllerFactory, что приводит к этому коду (или this code if you prefer closures - у меня нет, так как они тяжелее, чтобы проверить):
// module.config.php
'controllers' => array (
'factories' => array (
'Module\Concept\Index' => 'Concept\ControllerFactory\IndexControllerFactory',
),
),
'some_config_key' => array (
'x' => 'foo'
),
// src/Concept/ControllerFactory/IndexControllerFactory.php
class IndexControllerFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceLocator) {
$config = $serviceLocator->getServiceLocator()->get('config');
$controller = new \Html\Controller\IndexController($config['some_config_key']);
return $controller;
}
}
// src/Concept/Controller/IndexController.php
class IndexController {
public function __construct($config) {
// here we go, yay! we have $config['x'] == 'foo'
}
}
Если каждое действие нуждается в различной конфигурации (например, один, возможно, потребуется DB, другому может потребоваться PayPal), не представляется правильным пройти все Конфигурация контроллера, когда только его необходимо для действия.
Итак, необходимо ли знать, какая конфигурация необходима для того, какое действие переходит на завод или в контроллер? То есть, следует ли фабрике дать контроллеру только то, что ему нужно, на основе действия, или если контроллер получит всю его конфигурацию и внутренне понять это?
Update
зависимостей для каждого действия только что: специфичны. Контроллер объявляет, что ему нужно, а затем использует это, каким бы то ни было образом. Эти два действия имеют радикально разные потребности, что, возможно, контроллер имеет слишком широкий охват и может быть кандидатом на разделение.
Но, несмотря на это, лучший способ - то, что было ясным, надежным и, по-видимому, в соответствии с будущим направлением ZF, - это производство необходимых услуг на сервисной фабрике, а затем изготовление контроллера с необходимыми услугами ,
Два завода: обслуживание и контроллер. Контроллер объявляет свой контракт __construct
с услугами, которые он должен иметь, а затем фабрики производят их по мере необходимости из конфигурации модуля.
«возможно, лучший подход заключается в том, чтобы вводить только ту конфигурацию, которую он ожидает». Согласовано. Обновил мой вопрос по пути, который я выбрал (контроллеры и сервисные заводы). – bishop