2016-11-21 14 views
0

コントローラ外の設定変数にアクセスしようとしています。

私は試してみてください。

class pdfFooter extends \TCPDF 
{ 
public function footer() 
{ 
    $config = $this->get('core_parameters'); 
} 
} 

私はこのエラーを取得する:

Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "get" of class "Plugin\PrintBundle\Controller\pdfFooter".

は単純に呼び出す:

$this->writeHTMLCell($config->getParameter('heading_color_config')); 

がそれをトリガします。私が遭遇したこの問題の他のほとんどの話題は、それをグローバル化することを提案しています。確かに良い方法がありますか?

+1

(のparamsは、設定ファイルに予めdefinefする必要があります)あなたのクラスで

services: yourapp.bundle.pdffooter: class: App\Bundle\Foo\pdfFooter arguments: ['%param1%','%param2%',...] 

:それはあなたが必要なパラメータのみを注入するためにどのように見えるかここで コンテナを注入するhttps://stackoverflow.com/questions/40692433/how-to-get-the-root-path-in-helper-class-symfony2/40693266#40693266 – Federkun

+1

あなたが何をしても、コンテナを注入しないでください。代わりに、サービスについて少し学んでから、configオブジェクトを注入してください。 http://symfony.com/doc/current/service_container.html – Cerad

+0

コンテナの注入が悪いのはなぜですか? (私は確信しています、私はSymfonyを初めて使っています) – billblast

答えて

3

必要なサービスとパラメータにアクセスできるように、コンテナを注入する必要があります。

しかし、@Ceradが言ったように、主な理由(タイプヒントなし、使用されたサービスの制御、RunTimeコンパイルのエラー、不足している依存関係など)はなぜコンテナを注入するのが良い考えでないのですか?依存関係の置き換え:サービスがライブラリで定義されている場合、依存関係をローカルのものと置き換えることはできません。[1]

可能な場合は避けるようにしてください。ただ

class pdfFooter 
{  
private $param1; 
private $param2; 
// ... 

public function __construct($param1,$param2,...) 
{ 
    $this->param1 = $param1; 
    $this->param2 = $param2; 
    // ... 
} 

public function footer() 
{ 

    // you can access your params directly here 
} 
+0

まず、ContainerInterfaceはここで何もしません。第2に、コンテナを使用しない理由は、サイズとメモリ使用量とは関係ありません。 core_parametersが注入されていることを示すために答えを調整することを検討してください。 – Cerad

関連する問題