2013-08-23 33 views
1

我正嘗試使用ezpublish5爲我的頁面創建一個菜單。我遵循這個教程http://partialcontent.com/Code/working-with-ez-publish-5-subrequests。 我是Symfony的新手,但我有自己的軟件包在運行,至少它使用了我自己的pagelayout.html.twig。爲什麼Symfony2(ezpublish5)不能將我的控制器識別爲服務?

我明白了,做什麼路由,但是我就我而言,以創建菜單我需要別的東西,可能是一種服務,所以我可以在我的樹枝模板做到這一點

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

所以我加入這個我我\包\資源\ 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中故意犯的語法錯誤(它忽略了模板中控制器的調用),它不會改變任何東西。 另外我意識到,當我在我的\ Bundle \ DependencyInjection \ myBundleExtension.php(應該加載我的services.yml文件)中做同樣的事情時,它也不會發生任何事情。

所以我覺得捆綁安裝的東西是錯誤的,不知怎的,不是所有的東西都正確加載。但它會是什麼? symfony2文件中的某處說Bundle \ DependencyInjection \ xyzExtension.php中的加載方法會自動調用。

有人會想到我的設置可能會出錯嗎?我真的沒有想法了。 而對於ezpublish5部分..這真的是現在創建菜單的最佳方式嗎?

+0

您已經使用「%my_root .menucontroller.class%'你是否在config或parameters.yml的其他地方設置了這個屬性? – Kiksy

回答

0

看起來好像你的服務沒有被加載。

Symfony依賴命名約定來加載xyzExtension.php。它絆倒了我幾次。你可以在xyzExtension.load中粘貼一個die聲明來驗證它確實被調用。

如果未被調用,則可以更改擴展類名以符合約定,或者執行我所做的操作並僅覆蓋bundle類中的約定。

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 
相關問題