Symfony 3.4を使用した新しいリポジトリの設定に問題があります。最後のLTS(3.4)でsymfonyコマンドを作成し、コマンドを使用して新しいバンドルを追加しました。新しいバンドルは正常に機能しますが、このバンドル内に保存されているビューを使用できません。
私のバンドルの構造を示します:
この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を参照)/vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form)。
私の言うことは理解しています、私のフォルダはsymfonyが私のビューを検索する場所ではありませんが、「ListerBundle/Ressources/views」でSymfonyに言う方法が見つかりません
私の最も古いプロジェクトでは、他の構成なしで機能していました。
情報:バンドルを再利用可能なバンドルとして使用します。
よろしく、
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(),
];
...
そしてまた:ここに私の依存性注入
そして、ファイルの内容:
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');
}
}
Solution:@Ceradから
@ ListerLister/Default/index.html.twig
@Ceradからの元の応答
何らかの理由で、S3.4は、twigパスを指定するためのBundle:Dir:nameアプローチを好まなくなり、generate:bundleコマンドはまだ更新されていません。バグかどうかは不明です上記の@ ListerLister/Default/index.html.twigパスが機能するはずです。bin/ console debug:twigを試して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
メンテナの発言を確認します。
更新:偉大で強力なFabpot自身が私の問題に答えました。テンプレートに 'ListerListerBundle:Default:index.html.twig'形式を使い続けたい場合は、app/config/config.ymlファイルを編集します。
# app/config/config.yml
framework:
templating:
engines: ['twig']
これは、古い形式を引き続き使用するレガシーコードがある場合にのみ行う必要があります。すべての新しいコードにtwig名前空間を使用します。