Php 如何在Symfony中设置上下文值对象?

Php 如何在Symfony中设置上下文值对象?,php,design-patterns,symfony,Php,Design Patterns,Symfony,我使用kernel.request上的侦听器从主请求中提取一些信息。我希望所有控制器和其他侦听器、服务都可以使用这些信息 因为它是一个值对象UserContext,所以我不想把它变成一个服务 设置此上下文值对象以使其在任何地方都可用的最佳方式/模式是什么 我目前的想法是将其设置为$request对象: public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest())

我使用
kernel.request
上的侦听器从主请求中提取一些信息。我希望所有控制器和其他侦听器、服务都可以使用这些信息

因为它是一个值对象
UserContext
,所以我不想把它变成一个服务

设置此上下文值对象以使其在任何地方都可用的最佳方式/模式是什么

我目前的想法是将其设置为
$request
对象:

public function onKernelRequest(GetResponseEvent $event)
{
    if (!$event->isMasterRequest()) {
        return;
    }

    $request = $event->getRequest();

    $userContext = $this->userContextFactory->createFromRequest($request);

    $request->attributes->set('_user_context', $userContext);
}
另一个想法是定义一个助手服务,它可以用于/注入到其他服务中:

class UserContextHelper
{
    ...

    public function getUserContext()
    {
        $masterRequest = $this->requestStack->getMasterRequest();
        return $this
                 ->userContextFactory
                 ->createFromRequest($masterRequest);

}

是的。在请求中设置它正是我所做的,所以它必须是正确的:)顺便说一句,Event::isMasterRequest可以简化您的保护。@Cerad但这不是太模糊了吗?它也是一个完整的类,而不仅仅是放在param包中的一些密钥字符串对。让
UserContextHelper
使用
RequestStack
$masterRequest
推断出
UserContext
并始终返回它不是更好吗?我还可以在服务配置中将此服务注入到其他服务中。只要您确定UserContext的使用者在实际处理请求之前没有尝试使用它,那么UserContextHelper(也称为factory?)就可以了。问题是,您的使用者服务可能会在用户可用之前尝试调用getUserContext。特别是当消费者服务本身被注入到另一个服务中时。取决于请求的内容可能很棘手。