2016-11-07 11 views
0

私は、メインコントローラから「フォワード」メソッドを使用しようとしています。最初に、最初のコントローラから「転送されたコントローラ」に元の「要求」が送信されることを保証しています(両方のコントローラでvar_dumpを実行すると、同じ要求オブジェクトが取得されます)。しかし、転送されたコントローラからレンダリングされた小枝から「リクエストオブジェクト」へのアクセスを試みると、app.request.get(_route)、app.request.get(_route_params)などが異なります。これは、元の要求が小枝のグローバルからのみ失われているかのようです。転送されたコントローラ用にレンダリングされた小枝で、小枝app.request.get( '_ route_params')にアクセスするにはどうすればよいですか?

namespace MyBundle\Controller; 

//...  

class BookingController extends Controller { 

    /** 
    * @Route("/book/hotel/{slug}", name="booking_hotel") 
    */ 
    public function establishmentAction(Request $request, $slug = null) { 
     \dump($request); // dumper 1 

     return $this->forward('ExpediaBundle:Booking:index', array('request' => $request); 
    } 
} 
namespace ExpediaBundle\Controller; 

//... 

class BookingController extends Controller { 

    /** 
    * @Route("/expedia/booking", name="expedia_booking") 
    * @Template() 
    */ 
    public function indexAction(Request $request) 
    { 
     \dump($request); // dumper 2 

     // The dumper 1 === dumper 2 

     return array(); 
    } 
} 
{# file: ExpediaBundle:Booking:index.html.twig #}  

{{ dump(app.request.attributes.get('_route_params')) }} -> works fine 
{{ dump(app.request.get('_route_params')) }} -> works fine 

私は_route_paramsが正しくダンプ見ることができます(前方なし)ルートhttp://localhost/expedia/bookingに入力します。しかし、フォワードコントローラを使用すると、varDumperは両方のケースでnullを返します。

http://localhost/book/hotel/hotelname: 

{{ dump(app.request.attributes.get('_route_params')) }} -> null 
{{ dump(app.request.get('_route_params')) }} -> null 

私が間違って何をしているのですか?

ありがとうございます。

答えて

0

最後に、私は私の問題を解決しました。それはsymfonyの問題でrivaros https://github.com/symfony/symfony/issues/5804#issuecomment-17331590

でコメントしているよう

たぶんそのsymfonyのバグの実用的なソリューションはここに掲載されています https://github.com/symfony/symfony/issues/5804#issuecomment-17379777

return $this->forward('Yourbundle:Controller:action', 
    array(
     //... your parameters..., 
     '_route' => $this->getRequest()->attributes->get('_route'), 
     '_route_params' => $this->getRequest()->attributes->get('_route_params'); 
    )); 

ありがとうございました!

関連する問題