ルーティングで式を使用して条件を追加することができます。リクエストはルーティング式で使用できるので、チェックインできるようにする必要があります。
my_routes_1:
resource: "@MyBundle1/Resources/config/routing.php"
prefix: /
condition: "request.hasSession() && 'ROUTE1SESSID' === request.getSession().getName()"
my_routes_2:
resource: "@MyBundle2/Resources/config/routing.yml"
prefix: /ab/
condition: "request.hasSession() && 'ROUTE2SESSID' === request.getSession().getName()"
my_routes_3:
resource: "@MyBundle3/Resources/config/routing.yml"
prefix: /cd/
condition: "request.hasSession() && 'ROUTE3SESSID' === request.getSession().getName()"'
申し訳ありませんが、それはあなたがそれを持って後にセッション名の設定に問題があったと述べコードを実際に見てから質問
とは何の関係もなかったですこれを管理する唯一の方法は、起動する前に名前を設定することだと思われます。
これを行うには、他のものの前にロードされたonKernelRequest
のリスナーを作成し、そこからセッション名を管理することができます。セッションが最初にトークンストレージに要求されるまでセッションが作成されていないことがわかります。セキュリティコンテキストが[get|set|has|remove]Token()
のいずれかを実行する前に取得していれば問題ありません。
私は
AppBundle \イベント\ SessionNameSubscriber
class SessionNameSubscriber implements EventSubscriberInterface
{
private $routeSessionNames = array(
'my_routes_1' => 'ROUTE1SESSID',
'my_routes_2' => 'ROUTE2SESSID',
'my_routes_3' => 'ROUTE3SESSID',
);
/**
* @var SessionInterface
*/
private $session;
public function __construct(SessionInterface $session = null)
{
$this->session = $session;
}
public function onKernelRequest(GetResponseEvent $event)
{
// If no session is loaded do not set name.. obviously
if (null === $this->session) {
return;
}
$currentRoute = $request->attributes->get('_route');
foreach ($this->routeSessionNames as $route => $sessionName) {
if (strpos($currentRoute, $route) === 0) {
$this->session->setName($sessionName);
}
}
}
public function getSubscribedEvents()
{
return array(
KernelEvents::REQUEST => array('onKernelRequest', 2048)
);
}
}
AppBundle /リソース/設定/ services.yml
どのような方法でこれをテストしていないことに注意してください
app.subscriber.set_session_name:
class: AppBundle\Event\SessionNameSubscriber\SessionNameSubscriber
arguments:
- "@?session"
tags:
- { name: kernel.event_subscriber }
もしあなたが何かしたいのなら、cあなたはあなた自身の実装でそれを上書きする必要がありません(もちろん既存のものを拡張することができます) – JimL