私はSymfony 3アプリケーションのOAuthを扱うガードを書いています。アーリー/オートロードされたSymfony 3ルータから絶対URLを生成する方法
私のサービスの1つでは、コールバックURLとしてTwitterに送信する絶対URLを生成する必要があります。
#services.yml
...
app.twitter_client:
class: MyApiBundle\Services\TwitterClient
arguments:
- %twitter_client_id%
- %twitter_client_secret%
- connect_twitter_check
- '@request_stack'
- '@router'
- '@logger'
app.twitter_authenticator:
class: MyApiBundle\Security\TwitterAuthenticator
arguments:
- '@app.twitter_client'
- '@logger'
ロガーはデバッグ用に一時的です。
#TwitterClient.php service
...
use Monolog\Logger;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface;
class TwitterClient
{
/**
* TwitterClient constructor.
* @param string $identifier
* @param string $secret
* @param string $callbackUrl
* @param RequestStack $requestStack
* @param RouterInterface $router
* @param Logger $logger
*/
public function __construct(
string $identifier,
string $secret,
string $callbackUrl,
RequestStack $requestStack,
RouterInterface $router,
Logger $logger
) {
$callbackUrl = $router->generate($callbackUrl, [], RouterInterface::ABSOLUTE_URL);
$logger->info($callbackUrl);
...
}
とするとき、それはログに$callbackUrl
を出力し、それだけで私は別のURLを使用してアクセスしていますにもかかわらず、localhostを言います。
http://localhost/connect/twitter/check
コントローラから同じものを実行すると、完全な正しいURLが出力されます。
#TwitterController.php
...
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
class TwitterController extends Controller
{
/**
* @Route("/connect/twitter")
* @return RedirectResponse
*/
public function connectAction()
{
/** @var RouterInterface $router */
$router = $this->container->get('router');
$callbackUrl = $router->generate('connect_twitter_check', [], RouterInterface::ABSOLUTE_URL);
/** @var Logger $logger */
$logger = $this->container->get('logger');
$this->container->get('logger')
->info($callbackUrl);
...
この出力:
https://dev.myapi.com:8082/app_dev.php/connect/twitter/check
dev.myapi.com
ドメインは私のhostsファイルに設定され、ポイントはそれが簡単に自分のローカルアプリを区別するために作るために、localhostにしても、それが簡単に統合できるようにすることOAuthサービス。