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。特别是当消费者服务本身被注入到另一个服务中时。取决于请求的内容可能很棘手。