メソッドインジェクションで渡す場合、
コントローラからそのままRequestオブジェクトを渡せばよいと思います。
HogeController.php
public function editAction(Request $request)
{
$service = $this->get('hoge.hoge_service');
$service->tryHoge($request);
return;
}
とても単純ですね。
そうではなく、コンストラクタインジェクションで渡す場合、
services.ymlを以下のように定義すれば渡すことができました。
services.yml
hoge.hoge_service:
class: Hoge\HogeBundle\Service\Hoge\HogeManager
arguments:
- @doctrine.orm.default_entity_manager
- @validator
- @request_stack # ★リクエスト
- @logger
HogeManager.php
use Symfony\Component\HttpFoundation\RequestStack;
public function __construct(
EntityManagerInterface $em,
ValidatorInterface $validator,
RequestStack $requestStack,
LoggerInterface $logger
)
{
$this->em = $em;
$this->validator = $validator;
$this->logger = $logger;
$this->request = $requestStack->getCurrentRequest(); // ★リクエスト取得
$this->rootUrl = $this->request->getSchemeAndHttpHost(); // ★取得したリクエストでいろいろできる
}
こうすることで、DIコンテナがRequestを自動で設定してくれるので
サービスクラスを利用するクラスはサービスクラスのRequestについて気にしなくてもよくなります。