2017-06-23 19 views
-4

背景:symfony3のSymfonyの回避策

私はちょうどコントローラでredirectToRouteaddFlash方法はsymfonyの中で保護されているという事実で立ち往生しています。私は行動のための別のクラスを持っています。

namespace AppBundle\Action; 

class Base { 

    public function __construct($controller) { 
     $this->controller = $controller; 
    } 
} 

ご覧のとおり、ベースアクションクラスにはコントローラが必要です。アクションクラスはコントローラの一部であり、すべてのメソッドにアクセスできる必要があるため、基本的に論理的です。しかし、保護されているので$this->controller->addFlashと呼ぶことはできません。保護されている場合は、何らかの理由があるかもしれません。それは見つけられません。コントローラーメソッドを使用できるようにアクションクラスを変更する方法を教えてください。

メインコントローラに追加の機能があるので、コントローラからのアクションを拡張する方法は私には合いません。適切な方法で設定されます。

更新:私の目標はコントローラの機能を責任で分けることです。私はアクションクラスを発明しました。私の終了コードは以下のようになります:

public function editAction() { 
     $instance = new \AppBundle\Action\MyController\Edit($this); 
     return $insance->run(); 
    } 

この場合、私はコントローラを清潔に保ち、冗長ではありません。

+2

あなたの計画は何ですか?あなたがコントローラーを作っている場合はどうですか? symfonyのコントローラクラスを拡張してコントローラを作成します。あなたがいない場合は、[サービスコンテナ](https://symfony.com/doc/current/service_container.html)で作業するはずです。 –

+0

自分のmyAddFlash()をいつでも追加して公開することができます。しかしコントローラをコントローラに注入する(アクションでさえ)のはちょっと奇妙です。 – Cerad

+0

@Ceradコントローラにコントローラを挿入するのではなく、アクション(別のクラス)に挿入します。 – FreeLightman

答えて

0

Hereはあなたが本当にそのように仕事をしたい場合は、複製することができていること、symfonyのコントローラ形質にlinkです。

symfonyコントローラ全体を自分のコントローラに注入しているので、代わりに拡張する方がよいでしょう。インジェクションはIDで別のサービスを注入するためにここで使用されます。