2013-08-05 38 views
1

肯定是一個愚蠢的事情,但我無法從MyBundleSymfony2的 - 我的業務沒有註冊

的src/ME/MyBundle/

$ ls -R src/Me/MyBundle/ 

DependencyInjection/ 
    MeMyBundleExtension.php 
    Configuration.php 
Resources/ 
    config/ 
     services.yml 
Services/ 
    MyService.php 
MyBundle.php 

的src/ME/MyBundle註冊MyService /DependencyInjection/MeMyBundleExtension.php

namespace Me\MyBundle\DependencyInjection; 

// standard stuff 

class MeMyBundleExtension extends Extension 
{ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     // standard stuff loading the yml file 
    } 
} 

的src/ME/MyBundle/DependencyInjection /的configuration.php

namespace Me\MyBundle\DependencyInjection; 

use Symfony\Component\Config\Definition\Builder\TreeBuilder; 
use Symfony\Component\Config\Definition\ConfigurationInterface; 

class Configuration implements ConfigurationInterface 
{ 
    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = new TreeBuilder(); 
     $rootNode = $treeBuilder->root('my_services'); 

     return $treeBuilder; 
    } 
} 

的src/ME/MyBundle /資源/配置/ services.yml

services: 
    me.myservice: 
     class: Me\MyBundle\Services\MyService 

的src/ME/MyBundle /服務/MyService.php

namespace Me\MyBundle\Services; 

class MyService 
{ 
    public function __construct() 
    { 
     die('test'); 
    } 
} 

我可以看到我的服務沒有被註冊,當我嘗試instanti從CONTROLER

$test = $this->get('me.myservice'); 

您已請求不存在的服務 「me.myservice」

吃了有什麼問題嗎?


$ php app/console container:debug | grep me.mybundle 

沒有匹配

+1

類:調試 – rpg600

+0

感謝名單:ME \ MyBundle \ SERVICES \ MyService.yml => MyService.php 然後用PHP應用程序/臺集裝箱檢查服務的存在。我做了錯誤的複製/粘貼,問題更新。 'php app/console container:debug | grep me.mybundle'不給我任何匹配。 –

+0

你在你的'config.yml'和/或''config_dev.yml'中包含了'services.yml'嗎? – ferdynator

回答

2

的src/ME/MyBundle /資源/配置/ services.yml

services: 
    me.myservice: 
     class: Me\MyBundle\Services\MyService.yml 

這應該是指一類不是一個YML文件。所以它應該是class: Me\MyBundle\Services\MyService

此外,你應該檢查你的名字空間。如果你的包不是一個子包(getParent('SonataUserBundle')),你應該把你的類放在你自己的名字空間中。

的src/ME/MyBundle /服務/ MyService.php

namespace Me\MyBundle\Services; 

的src/ME/MyBundle/DependencyInjection /的configuration.php

namespace Me\MyBundle\DependencyInjection; 

還應將MyBundle.phpMeMyBundle.php根據symfony的命名策略。

+0

對不起,我沒有把我的複製/粘貼好,問題更新。 +1爲您的關注。 –

+1

'src/Me/MyBundle/DependencyInjection/Configuration.php'仍然不在正確的命名空間中。 – Flask

+0

又一個錯字。也感謝這一個。問題已更新。 (我最初做了修改以簡化問題,解釋錯別字) –

0

有一個自動映射的事情,其中​​擴展類名是從包名派生的。我前段時間遇到了麻煩。所以我通常只在Bundle類中明確指定擴展名。喜歡的東西:

namespace Cerad\Bundle\AppBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

use Cerad\Bundle\AppBundle\DependencyInjection\AppExtension; 

class CeradAppBundle extends Bundle 
{ 
    public function getContainerExtension() 
    { 
     return new AppExtension(); 
    } 
} 
+0

你的回答讓我有很多挫折感(我在這個問題上花了大約20分鐘)。謝謝! – ZvL