2012-08-06 7 views
6

私はSymfony 2のウェブサイトのHow to Override any Part of a Bundleページをフォローしています。これは面白いです:Symfony 2リクエストサービスを拡張しますか?

サービスのクラス名を保持するパラメータを、自分の クラスに設定するには、app/config/config.ymlに設定します。これはもちろん、クラス名がサービス内のパラメータとして定義されている場合は、 サービスを含むバンドルの コンフィグレーションの場合にのみ可能です。

だから私は/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/configを見て、私はそれのようなものでsymfonyのSessionクラスを拡張することは容易でなければなりませんのでsession.xmlは、%session.class%パラメータを定義していることがわかった:私はまだこれをテストdin't

namespace Acme\HelloBundle\Component\HttpFoundation; 

use Symfony\Component\HttpFoundation\Session; 

class ExtendedSession extends Session 
{ 
    public function setSuccessFlashText($text, array params = array()) 
    { 
     parent::setFlash('success', $this->getTranslator()->trans($text, $params); 
    } 
} 

。しかし、私はrequest特別サービスで同じことをどうしたらいいですか?コードを読みやすくするために便利なショートカットを追加したいと思います。

私はservices.xmlファイルでこれを見つけた:ここ

<!-- 
     If you want to change the Request class, modify the code in 
     your front controller (app.php) so that it passes an instance of 
     YourRequestClass to the Kernel. 
     This service definition only defines the scope of the request. 
     It is used to check references scope. 
    --> 
    <service id="request" scope="request" synthetic="true" /> 

は私app.phpです。カスタムリクエストクラスのインスタンスをどのように渡す必要がありますか?

require_once __DIR__.'/../app/bootstrap.php.cache'; 
require_once __DIR__.'/../app/AppKernel.php'; 
//require_once __DIR__.'/../app/AppCache.php'; 

use Symfony\Component\HttpFoundation\Request; 

$kernel = new AppKernel('prod', false); 
$kernel->loadClassCache(); 
//$kernel = new AppCache($kernel); 
$kernel->handle(Request::createFromGlobals())->send(); 
+0

'ウェブ/ app.php':あなたもコメントドキュメントでそのクラスを定義することができますIDEのためにあなたがサービスとして、またはコントローラからの要求を取得したい場合場合

、そんなことをしている? O_o –

+0

@thecatontheflat lol:私は '/ app'フォルダを見ていました...私は質問を更新します。 – gremo

答えて

13

まあ、簡単です。あなたのapp.php

だけではなく、デフォルトののインスタンスを渡します

require_once __DIR__.'/../app/bootstrap.php.cache'; 
require_once __DIR__.'/../app/AppKernel.php'; 
//require_once __DIR__.'/../app/AppCache.php'; 

use src\YourCompany\YourBundle\YourRequest; 

$kernel = new AppKernel('prod', false); 
$kernel->loadClassCache(); 
//$kernel = new AppCache($kernel); 
$kernel->handle(YourRequest::createFromGlobals())->send(); 

ちょうどあなたがクラスにデフォルトRequestから伸びていること、確認してください。

追加のサービス定義なしで動作する必要があります。


コメントによると、これはIDE自動補完に問題を引き起こすと考えられています。理論的にはそうではありません。お使いのコントローラで

あなただけちょうどそのクラスを定義し、

use src\YourCompany\YourBundle\YourRequest; 

そして、あなたは$requestを渡すアクション、中useステートメントを追加します。

public function yourAction(YourRequest $request) 

これはあなたの自動補完を与えるだろう。そうしない -

/** @var $request YourRequest */ 
    $request = $this->getRequest(); 
+0

Mhm ...とても簡単だと思うよ、私は試してみよう!それでは、これだけ悪いことは、IDEの自動完了機能を利用できないということです。 – gremo

+0

いつでもできます。私の答えを更新しました –

+0

'$ this-> getRequest()' ... – gremo

関連する問題