Я хотел бы использовать метод контроллера из другого пакета, в моем контроллере.
Метод this-> forward нуждается в объекте Response, и я не знаю, как его использовать.
public function indexAction($name)
{
$response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
'name' => $name,
'color' => 'green',
));
// ... further modify the response or return it directly
return $response;
}
И я видел, что я могу использовать сервис, но я хочу знать, является ли это лучшим решением или они другое.
$this->forward
принимает аргументы в следующем порядке:
Эти параметры могут быть доступны в контроллере с помощью функций доступа к запросу.
Иногда вы хотите полностью обойти защиту и запустить команду на другом контроллере, несмотря на уровень разрешений пользователя. К счастью, вы можете сделать это довольно легко.
Сначала запустите команду use для вашего контроллера в верхней части контроллера, с которого вы хотите использовать данные:
use AppBundle\Controller\MySourceDataController;
Затем вызовите эту функцию из вашего конечного контроллера:
$response = MySourceDataController::getTheData( $option1, $option2 );
Если вам нужно передать объект Request, вы можете сделать это следующим образом:
$response = MySourceDataController::getTheData( new Request( array(
'server' => 'USAServer1',
) ), $option2 );
Это возвращает Запрос с установленным параметром сервера. Я также определил $ option2, это будет переменная, часто определяемая в URL, например:
* @Route("/mydata/{server}/", name="api-source-data")
* @param Request $request
* @param $server
Наконец, если вы передаете JSON в этот контроллер и хотите преобразовать его обратно в объект, вы можете запустить этот бит кода в $ response:
if ( 0 === strpos( $response->headers->get( 'Content-Type' ), 'application/json' ) ) {
$response = json_decode( $response->getContent(), true );
}
Вуаля. Получите доступ к любому контроллеру из любого другого контроллера и обойдите нотацию безопасности для исходного контроллера. 🙂