1

ezpublish5 で自分のページのメニューを作成しようとしています。このチュートリアルhttp://partialcontent.com/Code/working-with-ez-publish-5-subrequestsに従いました。私は Symfony にかなり慣れていませんが、独自のバンドルがあり、実行されています。少なくとも、独自の pagelayout.html.twig を使用しています。

ルーティングが何をするかは理解していますが、私に関する限り、メニューを作成するには何か他のもの、おそらくサービスが必要なので、小枝テンプレートでこれを行うことができます

{{ render( controller( "myMenuController:myFunction" ) ) }}

これを my\Bundle\Resources\config\services.yml に追加します

parameters:
    my_root.menucontroller.class: my\Bundle\Controller\MenuController

services:
    my_root.controller:
        class: %my_root.menucontroller.class%
        arguments: [@ezpublish.view_manager]
        calls:
            - [setContainer, [@service_container] ]

    myalias:
        alias: my_root.controller

ブラウザで開くと、次のように表示されます。

You have requested a non-existent service "myalias".") in "{% extends "Bundle::pagelayout.html.twig" %}

github で ezp5 インストールの他のリポジトリを確認しましたが、ほとんど同じ yml セットアップがあります。また、services.yml で意図的に構文エラーを作成しても (テンプレートでコントローラーへの呼び出しを省略しながら)、何も変わらないことにも気付きました。また、my\Bundle\DependencyInjection\myBundleExtension.php (services.yml ファイルをロードすることになっている) で同じことを行っても、何も起こらないことに気付きました。

そのため、bundle-setup の何かが間違っていると感じています。どういうわけか、すべてが正しくロードされているわけではありません。しかし、それは何でしょうか?symfony2 のドキュメントのどこかに、Bundle\DependencyInjection\xyzExtension.php の load-method が自動的に呼び出されると書かれています。

私のセットアップで何が間違っている可能性があるのか​​ 、誰かが考えているでしょうか? 私は本当にアイデアが不足しています。そして、ezpublish5 の部分については.. これは本当にメニューを作成する最良の方法ですか?

4

1 に答える 1

0

サービスが読み込まれていないようです。

symfony は、命名規則に依存して xyzExtension.php をロードします。それは私を数回つまずかせました。実際に呼び出されていることを確認するためだけに、xyzExtension.load に die ステートメントを挿入できます。

呼び出されていない場合は、拡張クラス名を規則に合わせて変更するか、私が行っていることを実行して、バンドル クラスの規則をオーバーライドすることができます。

namespace Cerad\Bundle\GameV2Bundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

use Cerad\Bundle\GameV2Bundle\DependencyInjection\GameExtension;

class CeradGameV2Bundle extends Bundle
{   
    public function getContainerExtension()
    {
        return new GameExtension();
    }
}

もちろん、 xyzExtension には次のようなものが必要です。

namespace Cerad\Bundle\GameV2Bundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;

class GameExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
    public function getAlias() { return 'cerad_game_v2'; }
}

コマンド ラインから、サービスが取得されていることを確認できます。

app/console container:debug : grep my_root
于 2013-08-23T14:50:10.170 に答える