2016-11-07 51 views
0

我想從主控制器使用「轉發」方法。首先我向我保證,原始的「請求」從第一個控制器發送到「轉發控制器」(如果我在兩個控制器中執行var_dump,我會得到相同的請求對象)。但是,當我嘗試訪問從轉發控制器呈現的樹枝中的「請求對象」時,app.request.get(_route),app.request.get(_route_params)等是不同的。就好像原來的請求只是從twig全局變量中丟失了一樣。如何訪問樹枝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 

當我進入到路由http://localhost/expedia/booking(不前)我可以看到_route_params正確轉儲。但是如果我使用forward控制器,varDumper在兩種情況下均返回null。

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

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

我在做什麼錯?

謝謝您的高級。

回答

0

最後,我解決了我的問題。

也許因爲它是由rivaros在symfony的問題的評論它是一個symfony的錯誤https://github.com/symfony/symfony/issues/5804#issuecomment-17331590

的實際解決方案張貼在這裏: 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'); 
    )); 

謝謝!