我正在尝试通过将自定义 AttributBags 集成到会话中来整理我的会话变量。在 Symfony < 6.0 中,您可以将自定义 AttributBag 注入会话服务中。
查看相关问题
然而这种方法在 Symfony >= 6.0 中不再有效。这篇博客文章解释了会话服务已被弃用,现在必须通过 request_stack 服务进行访问。对于控制器来说,这工作得很好。
我当前(不起作用)的方法如下所示:定义自定义 AttributBag 类。
class ShoppingCartBag extends AttributeBag {
public function __construct(string $storageKey = 'shoppingCart') {
parent::__construct($storageKey);
}
}
Run Code Online (Sandbox Code Playgroud)
在 Kernel 类中添加自定义 CompilerPass,以便 Symfony 在构建容器时处理所有更改。
class Kernel extends BaseKernel {
use MicroKernelTrait;
protected function build(ContainerBuilder $container): void {
$container->addCompilerPass(new AddShoppingCartBagToSessionService());
}
}
Run Code Online (Sandbox Code Playgroud)
自定义的 CompilerPass 看起来像这样。
class AddShoppingCartBagToSessionService implements CompilerPassInterface {
public function process(ContainerBuilder $container) {
$container->getDefinition('request_stack') …Run Code Online (Sandbox Code Playgroud)