Symfony 3.4 Используйте представление внутри моего пакета

У меня возникли проблемы с конфигурацией нового репозитория с использованием Symfony 3.4. Я использовал команду symfony для создания его с последним LTS (3.4), и я тоже добавляю новую команду Bundle. Мой новый Bundle работает и работает хорошо, но я не могу использовать представление, хранящееся внутри этого пакета.

Я покажу вам структуру моего Bundle:

состав

Я хочу использовать этот index.html.twig в моем контроллере следующим образом:

<?php namespace Lister\ListerBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class DefaultController extends Controller { /** * @Route("/lister") */ public function indexAction() { return $this->render('ListerListerBundle:Default:index.html.twig'); } } 

Но когда я пытаюсь сделать это, у меня есть эта ошибка.

Не удалось найти шаблон «ListerListerBundle: Default: index.html.twig» (просмотрел: / home / emendiel / Data / Code / Perso / WebLister / app / Resources / views, / home / emendiel / Data / Code / Perso / WebLister / продавец / Symfony / Symfony / SRC / Symfony / мост / Twig / Ресурсы / мнение / форма).

Я понимаю, что это говорит, моя папка не там, где symfony ищет мой взгляд, но я не нашел, как могу сказать, что Symfony перешел в «ListerBundle / Ressources / views»,

В моем старом проекте, который работал без другой конфигурации.

Информация: Я использую свой пакет как многоразовый пакет.

С Уважением,

PS: Это моя автозагрузка в composer.json

 "autoload": { "psr-4": { "": "src/" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, 

PSS: My AppKernel:

 public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new Symfony\Bundle\SecurityBundle\SecurityBundle(), new Symfony\Bundle\TwigBundle\TwigBundle(), new Symfony\Bundle\MonologBundle\MonologBundle(), new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Lister\ListerBundle\ListerListerBundle(), ]; ... 

И снова: здесь My dependencyInjection

введите описание изображения здесь

И содержимое файлов:

configuration.php

 <?php namespace Lister\ListerBundle\DependencyInjection; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; /** * This is the class that validates and merges configuration from your app/config files. * * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/configuration.html} */ class Configuration implements ConfigurationInterface { /** * {@inheritdoc} */ public function getConfigTreeBuilder() { $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('lister_lister'); // Here you should define the parameters that are allowed to // configure your bundle. See the documentation linked above for // more information on that topic. return $treeBuilder; } } 

ListerListerExtension.php

 <?php namespace Lister\ListerBundle\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\Config\FileLocator; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader; /** * This is the class that loads and manages your bundle configuration. * * @link http://symfony.com/doc/current/cookbook/bundles/extension.html */ class ListerListerExtension extends Extension { /** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); } } 

Решение: от @Cerad

@ ListerLister / Default / index.html.twig

Оригинальный ответ от @Cerad

По какой-то причине S3.4 больше не любит Bundle: Dir: name для указания путей ветви и команда generate: bundle еще не обновлена. Не уверен, что это ошибка или функция. Предлагаемый выше путь @ ListerLister / Default / index.html.twig должен работать. Попробуйте bin / console debug: twig, чтобы увидеть ваши пути пространств имен ветвей. – Cerad

Основная проблема заключается в том, что в S3.4 шаблоны шаблонов twig, такие как «ListerListerBundle: Default: index.html.twig», больше не поддерживаются.

Замените путь в контроллере:

 '@ListerLister/Default/index.html.twig' 

И все должно быть хорошо. Если вы когда-либо не уверены, что будет выполняться фактический префикс пространства имен:

 bin/console debug:twig 

перечислить их.

S3.3 все еще работает нормально, так что это то, что изменилось в 3.4. Предположим, что так или иначе используется формат имен, поэтому это не имеет большого значения.

Я написал об этом на github: https://github.com/sensiolabs/SensioGeneratorBundle/issues/587

Мы увидим, что говорят сопровождающие.

Обновление: Великий и могущественный сам Фабпо ответил на мою проблему. Если вы хотите использовать формат «ListerListerBundle: Default: index.html.twig» для шаблонов, отредактируйте файл app / config / config.yml:

 # app/config/config.yml framework: templating: engines: ['twig'] 

Вы должны сделать это, только если у вас есть старый код, который по-прежнему использует старый формат. Используйте пространства имен ветвей для всего нового кода.

  "psr-4": { "ListerBundle\\": "src/ListerBundle", } 

откройте терминал в папке, где расположен проект.

 $composer dump-autoload