Я создаю приложение на основе компонентов 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
сделать доступной службу веток.
Спасибо за подсказки.