после копания в коде симфони, в частности ControllerResolver, кажется, что им пытаются сделать на самом деле разве это возможно, если я не подкласс/реализации ControllerResolverInterface сам.Symfony 2 зависимостей контроллера, простирающиеся ContainerAware
это следующий код, который инициализирует контроллер передается от маршрута:
protected function createController($controller)
{
if (false === strpos($controller, '::')) {
throw new \InvalidArgumentException(sprintf('Unable to find controller "%s".', $controller));
}
list($class, $method) = explode('::', $controller, 2);
if (!class_exists($class)) {
throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
}
return array(new $class(), $method);
}
как вы можете видеть на последней строке, это всегда экземпляр без аргументов, переданных, поэтому мне придется переопределить метод для инъекции чего-либо таким образом. чувствует себя очень взломанным.
Оригинал Вопрос
Я пытаюсь понять, как я могу вводить услуги в пользовательский контроллер, определенным в динамических маршрутов с использованием компонентов Symfony (например не полной рамочные стека).
Обратите внимание: я не с использованием полной структуры стека и не использую их код src DemoBundle. У меня есть composer.json
файл, который требует компонентов, поэтому у меня есть собственный index.php
файл, который является более или менее такой же, как и подробное здесь:
я следующее:
$routes = new RouteCollection();
$routes->add(
'some route name',
new Route(
'a route path',
array(
'_controller' => 'App\MyBundle\Controller\MyController::handle'
)
)
);
Тогда у меня есть следующие в App/MyBundle/DependencyInjection/MyExtension.php
:
public function load(array $configs, ContainerBuilder $container) {
$loader = new XmlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resource/config')
);
$loader->load('services.xml');
}
App/MyBundle/Resources/config/services.xml
:
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="templating" class="Symfony\Component\Templating\EngineInterface" />
<service id="navigation" class="App\MyBundle\Controller\MyController">
<argument type="service" id="templating" />
</service>
</services>
</container>
Я в основном пытаюсь получить услугу шаблонной впрыскивается в MyController
конструктор, и я понимаю, файл MyExtension
должен загружаться автоматически. Я предполагаю, что, поскольку я не использую полную структуру стека, это причина, но как я могу заставить это работать?
Загрузка расширений является частью структуры. Это происходит, когда вы добавляете пакет в AppKernel. Так что нет, это, вероятно, не будет автоматическим. Я не прочитал весь учебник, но я подозреваю, что вам может понадобиться изменить src/app.php? Посмотрите, где строится контейнер. – Cerad
Привет, нет app.php - как указано, я использую автономные компоненты, а не полную структуру. Я использую свой собственный контейнер. проблема заключается в том, как я могу ввести что-то в контроллер, который определяет атрибут Route _controller. – djjjuk
Я понимаю это. Ссылка, которую вы указали, фактически указывает на часть 6 учебника, а не на часть 12. Возможно, это исправить. Я имел в виду src/app.php из части 6. – Cerad