1

どういうわけかコントローラーデータを前処理する方法はありますか?セッションからparamを取得し、それを検証してコントローラープロパティとして割り当て、可能であれば、一部のコントローラーまたはすべてのコントローラーのアクション内で$this->myVarとして使用します。コントローラのコンストラクタを使用しても何も得られず、リクエストとセッションデータにアクセスできませんでした。ありがとう!

UPD:ありがとう、jkucharovic、とても良い解決策。また、注入せずに少し汚い解決策があります。setContainer()メソッド。これは$ controller = new Controller();の直後に呼び出されます。

use Symfony\Component\DependencyInjection\ContainerAwareInterface,
    Symfony\Component\DependencyInjection\ContainerInterface;

class AppServiceController extends Controller {
 private $my_property;

 /**
  * Used as constructor
  */
 public function setContainer(ContainerInterface $container = null)
 {
    parent::setContainer($container);   
    $this->my_property = 'foo';
    // your controller code
 }
}
4

2 に答える 2

4

あなたがしたくないことがとても役立つかどうかはわかりません。コントローラインスタンスは、コントローラが呼び出されるたびに作成されます。コントローラーを呼び出すたびに、セッションと要求は異なります。

セッションでMyVar値にアクセスするには、ショートカットメソッドを使用してBaseControllerクラス拡張クラスを作成する必要があると思います。Controller

class BaseController extends Controller 
{
    public function getMyVar()
    {
        return $this->get('session')->get('MyVarSessionKey');
    }
}

他のすべてのコントローラーはこれから拡張されますBaseController

Controllerリクエストを取得するには、クラスが提供するショートカットメソッドを使用しController::getRequest()ます。

于 2012-05-11T09:34:41.843 に答える
1

__constructメソッドでサービスを使用する場合は、最初にそのサービスを注入する必要があります。その後、他の方法の前にそれらを使用できます。例えば:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session;

public function __construct(Request $request, Session $session)
{
    …
}
于 2012-05-11T10:49:50.280 に答える