У меня возникли проблемы с конфигурацией нового репозитория с использованием 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