我已将 symfony 更新到 5.3 并获取弃用日志,例如
用户已弃用:自 symfony/framework-bundle 5.3 起:该
session.storage.factory.service服务已弃用,请使用session.storage.factory.native,session.storage.factory.php_bridge或session.storage.factory.mock_file代替。
我认为这是由使用引起的TokenStrageInterface::getToken(),但我找不到解决方案。
我使用的代码是这样的。
<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Gedmo\Loggable\LoggableListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Http\Authenticator\Passport\PassportInterface;
class DoctrineExtensionSubscriber implements EventSubscriberInterface
{
/**
* @var LoggableListener
*/
private LoggableListener $loggableListener;
/**
* @var TokenStorageInterface
*/
private TokenStorageInterface $tokenStorage;
public function __construct(LoggableListener $loggableListener,
TokenStorageInterface $tokenStorage
)
{
$this->loggableListener = $loggableListener;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => [
'onKernelController',
-10,
],
];
}
public function onKernelController(ControllerEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
if ($this->tokenStorage?->getToken()?->isAuthenticated() === true) {
$user = $this->tokenStorage->getToken()->getUser();
$controller = $event->getController();
if (is_array($event->getController())) {
$controller = $event->getController()[0];
}
if ($user instanceof User) {
$this->loggableListener->setUsername($user->getFullName());
return;
}
$this->loggableListener->setUsername('Anonymous');
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想过编辑配置文件,但我无法确定在哪里更改。请参阅以下代码config/packages/framework.yaml:
# see https://symfony.com/doc/current/reference/configuration/framework.html
framework:
secret: '%env(APP_SECRET)%'
#csrf_protection: true
#http_method_override: true
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
#handler_id: null
cookie_secure: auto
cookie_samesite: lax
save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
#esi: true
#fragments: true
php_errors:
log: true
Run Code Online (Sandbox Code Playgroud)
Cer*_*rad 27
您的framework.yaml 会话部分应如下所示:
session:
handler_id: null
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
Run Code Online (Sandbox Code Playgroud)
这是您在新的 5.3 项目中获得的默认配置。如果需要,您可以保留 save_path 条目。storage_value_id是在5.3中引入的。
根据storage_factory_id文档,默认值应该已经是factory.native。这意味着您实际上根本不需要该条目。
但是,如果您忽略的话, bin/console debug:config 框架会话会显示不同的结果。不确定这是否是一个错误。
无论如何,添加 storage_factory_id 后错误就会消失。
| 归档时间: |
|
| 查看次数: |
7508 次 |
| 最近记录: |