我有一個控制器將整個請求轉發給另一個控制器。 第一個控制器是Version1Controller
,而$this->controller
不爲空,使我可以訪問服務。它將請求轉發到服務中定義的GetUserTrialsController
,如controller.get_user_trials
。在第二個控制器$this->container
爲空。 symfony如何失去一半?有什麼方法可以傳遞容器嗎?Symfony 2控制器轉發到另一個控制器時丟失容器
下面是展示行爲
services.yml
services:
controller.get_user_trials:
class: AppBundle\Controller\GetUserTrialsController
Version1Controller.php
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class Version1Controller extends Controller
{
public function indexAction(Request $request)
{
var_dump("V1Controller " . json_encode(is_null($this->container)));
return $this->forward("controller.get_user_trials:indexAction");
}
}
GetUserTrials.php
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class GetUserTrialsController extends Controller
{
public function indexAction(Request $request)
{
var_dump("GetUserTrials " . json_encode(is_null($this->container)));
return "abc";
}
}
輸出的代碼:
string(18) "V1Controller false"
string(13) "GetUserTrials true"
abc
第二個控制器是服務,所以你必須注入容器到該服務。 – malcolm
我希望$ this-> forward能爲我做到這一點嗎?該函數執行此操作 - 返回$ this-> container-> get('http_kernel') - > handle($ subRequest,HttpKernelInterface :: SUB_REQUEST);在我看來,它似乎正在初始化一個新的請求,並且完成了與原來相同的事情?這將包括設置服務容器 –
當控制器以「App:Controller:Action」格式創建時,容器將由框架注入,否則您必須自己動手。如果你希望它是一個服務,你必須安排容器注入(通過監聽器或服務定義)。 – qooplmao