Я пытаюсь создать микро-приложение с Symfony 5, подход с одним файлом работает, но продвинутый пример с использованием Twig, et c. нет.
Я создал тестовый проект, следуя точному описанию, опубликованному здесь: https://symfony.com/doc/current/configuration/micro_kernel_trait.html, у меня такая же структура каталогов и такое же содержимое файла, как в примере:
Это индекс. php для запуска приложения:
// public/index.php
use App\Kernel;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Component\HttpFoundation\Request;
$loader = require __DIR__.'/../vendor/autoload.php';
// auto-load annotations
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
$kernel = new Kernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
И это MicroController с (пример) действие:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MicroController extends AbstractController
{
/**
* @Route("/random/{limit}")
*/
public function randomNumber($limit)
{
$number = random_int(0, $limit);
return $this->render('micro/random.html.twig', [
'number' => $number,
]);
}
}
Метод "configureContainer" в ядре. php вызывается и работает без ошибок:
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
{
$loader->load(__DIR__.'/../config/framework.yaml');
// configure WebProfilerBundle only if the bundle is enabled
if (isset($this->bundles['WebProfilerBundle'])) {
$c->loadFromExtension('web_profiler', [
'toolbar' => true,
'intercept_redirects' => false,
]);
}
}
, но проект по-прежнему не выполняется, вызывая действительный маршрут (например, "/ random / 10", как в примере) выдает мне ошибку: "" App \ Controller \ MicroController "не имеет установленного контейнера, вы забыли определить его как подписчик службы?"
my composer. json выглядит так:
"doctrine/annotations": "^1.8",
"symfony/config": "^5.0",
"symfony/dependency-injection": "^5.0",
"symfony/framework-bundle": "^5.0",
"symfony/http-foundation": "^5.0",
"symfony/http-kernel": "^5.0",
"symfony/routing": "^5.0",
"symfony/twig-bundle": "^5.0",
"symfony/web-profiler-bundle": "^5.0",
"symfony/yaml": "^5.0",
Чего мне не хватает? Любая подсказка приветствуется.