Внедрение зависимостей на основе компонентов Symfony [Абстрактный контроллер] - PullRequest
0 голосов
/ 04 октября 2018

Я создаю приложение на основе компонентов Symfony 4, но не использую всю инфраструктуру.

У меня есть точка входа

require __DIR__.'/../vendor/autoload.php';
require APP_PATH.'/var/cache/app/AppContainer.php';
$request = Request::createFromGlobals(); 

$kernel = new Kernel(new AppContainer());
$response = $kernel->handle($request);
$response->send();

Я использую маршрутизацию и службы, настроенные с помощью файлов YAML.Мой файл ядра:

namespace App;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\HttpKernel\HttpKernelInterface;

final class Kernel implements HttpKernelInterface{

    private $container;

    public function __construct(\AppContainer $container)
    {
        $this->container = $container;
    }

    public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
    {
        $routing = $this->container->get('routing');
        $context = new RequestContext();        
        $context->fromRequest($request);
        $routing->setContext($context);

        $route = $routing->matchRequest($request);
        $request->attributes->replace($route);

        [$ctrl, $action] = explode('::', $route['_controller'], 2);
        return $this->container->get($ctrl)->{$action.'Action'}($request);
    }
}

Я не использую пакет Symfony (потому что мне не нужны все сервисы, которые там есть).

Моя идея заключается в том, чтобы каждый контроллер расширял AbstractController.Абстрактный контроллер должен включать метод визуализации веток.Это означает, что TwigEnv должен быть толчком как зависимость от сервисов.

В таком случае я не могу использовать extends AbstactController с зависимостями.

Я бы хотел избежать использования стиля Symfonyи включить весь контейнер в контроллер.Контейнер должен быть просто в ядре, для контроллеров это просто сервисы.

У меня вопрос такой.Можно ли использовать MyController extends AbstractController и получать зависимости от абстрактного контроллера?

Что-то вроде в services.yaml

abstract:
    class: App\Web\Controller\AbstractController  
    arguments: ['@twig']
  twig:
    class: Twig_Environment
    arguments: ['@twig.loader',{cache: '../var/cache/app/'}]  

и в контроллере MyController extends AbstractController сделать доступной службу веток.

Спасибо за подсказки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...