2016-04-11 1 views
1

symfonyからサービスcmf_block.reference_adminを登録解除したいと思います。 私はいくつかの研究の結果、CompilerPassを使って実行する必要があることを発見しました。ここで私はそれを削除する方法です:symfony:サービスを削除する(cmf_block.reference_admin)

namespace PortalBundle\DependencyInjection\Compiler; 

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 

class UnregisterThirdPartyServicesPass implements CompilerPassInterface 
{ 
    public function process(ContainerBuilder $container) 
    { 
     if($container->getDefinition('cmf_block.reference_admin')) 
      $container->removeDefinition('cmf_block.reference_admin'); 
    } 
} 

を、これが行われた後、私はエラーを取得する:

Uncaught exception 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' with message 'You have requested a non-existent service "cmf_block.reference_admin".' in xxx\cmf-sandbox-master\app\bootstrap.php.cache:2198 Stack trace: #0 xxx\cmf-sandbox-master\app\cache\dev\classes.php(11818): Symfony\Component\DependencyInjection\Container->get('cmf_block.refer...') #1 xxx\cmf-sandbox-master\vendor\sonata-project\admin-bundle\Route\RoutesCacheWarmUp.php(47): Sonata\AdminBundle\Admin\Pool->getInstance('cmf_block.refer...') #2 xxx\cmf-sandbox-master\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate.php(48): Sonata\AdminBundle\Route\RoutesCacheWarmUp->warmUp('xxx') #3 xxx\cmf-sandbox-master\app\bootstrap.php.cache(2711): Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp('C:\ in xxx\cmf-sandbox-master\app\bootstrap.php.cache on line 2198

たぶん、あなたの誰かが、リファレンスブロックを除去することができるか、私を助けるか知っていることができます私のSymfonyのCMFブロックバンドルの機能

ありがとうございます!一例として

+0

エラーがキャッシュファイルにあります。すべてのキャッシュをクリアしましたか? –

+0

サービスが存在するかどうかを確認してから削除してください。 – Matteo

+0

@FrançoisDupontはいキャッシュをクリアしました。違いはありません。 – Tim

答えて

1

Check if the service exist before try to remove it、:

public function process(ContainerBuilder $container) 
    { 
     if ($container->hasDefinition('cmf_block.reference_admin')) 
     { 
      $container->removeDefinition('cmf_block.reference_admin'); 
     } 
    } 

、サービスがコンテナ内に実際に存在することができた瞬間にあなたのコンパイラのパスを追加します。パスオーダーの制御方法については、hereを参照してください。例として、次のように登録:

// ... 
$container->addCompilerPass(
    new CustomPass(), 
    PassConfig:: TYPE_REMOVE 
); 

・ホープ、このヘルプ

0

さて、私は、この特定のサービスの登録を解除することはできていないようです。私はそれがサードパーティのバンドルではあまりにも深いと思う。

私の(非常に単純で、本当に私を幸せにしない)回避策:サービスへのすべてのルートをすべてのユーザーに許可しないため、アクセスできず、ダッシュボードからリンクを削除できません。

助けてくれてありがとう - 誰かが上記の仕事をする方法を知っていれば、私はいつも興味があります!

関連する問題