如何处理 Symfony 5.3 弃用?

Dan*_*ter 6 php symfony symfony5

从 Symfony 4.4 -> 5.3 升级后,我遇到了一些我无法解决的弃用问题。

\n

以下是 3 个弃用示例:

\n
User Deprecated: Since symfony/framework-bundle 5.3: The "session.storage.factory.service" service is deprecated, use "session.storage.factory.native", "session.storage.factory.php_bridge" or "session.storage.factory.mock_file" instead.\nUser Deprecated: Since symfony/security-core 5.3: The "Symfony\\Component\\Security\\Core\\Event\\AuthenticationFailureEvent" class is deprecated, use "Symfony\\Component\\Security\\Http\\Event\\LoginFailureEvent"\nUser Deprecated: Since symfony/http-kernel 5.3: "Symfony\\Component\\HttpKernel\\Event\\KernelEvent::isMasterRequest()" is deprecated, use "isMainRequest()" instead.\n
Run Code Online (Sandbox Code Playgroud)\n

这只是 30 次弃用中的 3 次。我的问题是:解决此警告的正确方法是什么?(我需要解决,因为我每分钟有很多请求,每次在 dev.log 中写入此警告时 - 该文件都会爆炸)

\n

我想从第三个警告开始。这是跟踪:

\n
../vendor/symfony/http-kernel/Event/KernelEvent.php:88 {\xe2\x96\xb6}\n../vendor/symfony/web-link/EventListener/AddLinkHeaderListener.php:41 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/Debug/WrappedListener.php:117 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/EventDispatcher.php:230 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/EventDispatcher.php:59 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:151 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/HttpKernel.php:190 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/HttpKernel.php:178 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/HttpKernel.php:79 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/EventListener/ErrorListener.php:60 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/Debug/WrappedListener.php:117 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/EventDispatcher.php:230 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/EventDispatcher.php:59 {\xe2\x96\xb6}\n../vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:151 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/HttpKernel.php:218 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/HttpKernel.php:90 {\xe2\x96\xb6}\n../vendor/symfony/http-kernel/Kernel.php:199 {\xe2\x96\xb6}\n../public/index.php:25 {\xe2\x96\xb6}\n
Run Code Online (Sandbox Code Playgroud)\n

所有文件都直接来自 symfony,没有来自我,这就是为什么我的问题从哪里开始解决这个警告。

\n

Dan*_*ter 12

好的,现在我已经不再弃用了,但是从 4.​​4 升级到 5.3 后还有一些事情需要注意

为了查找所有警告,我创建了一个新的 symfony 项目来比较不同的文件

  1. KernelEvent::isMasterRequest()" is deprecated, use "isMainRequest()

    查看您的文件src/Kernel.php- 在那里您可以找到已弃用的方法

  2. The "session.storage.factory.service" service is deprecated

    打开你的framework.yaml并与以下代码进行比较。也许它可以帮助你:

    session:
      handler_id: session.handler.native_file
      save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
      # 2 Days lifetime (172800 seconds)
      cookie_lifetime: 172800
      cookie_secure: 'auto'
      cookie_samesite: 'lax'
      #storage_id: session.storage.mock_file
      storage_factory_id: session.storage.factory.native  
    
    Run Code Online (Sandbox Code Playgroud)
  3. The "Symfony\Component\HttpFoundation\Session\SessionInterface are deprecated

    我在旧的 LoginAuthenticator 中找到了这个(默认情况下为“App\Security...”)。将其替换为“use Symfony\Component\HttpFoundation\RequestStack;现在您可以注入它并使其可用” $this->requestStack,然后使用“完成”更改所有$this->session内容$this->requestStack->getSession()

  4. 大多数其他弃用都与symfony 5.1 中引入的新的基于身份验证器的系统有关。你必须编辑你的security.yaml. 我向你展示我的改变:

    security:
        enable_authenticator_manager: true
        password_hashers:
           Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
        providers:
            users_in_memory: { memory: null }
            app_user_provider:
               entity:
                 class: App\Entity\User
                 property: username
        firewalls:
            main: 
                # default stuff
                provider: app_user_provider
                http_basic: ~
                form_login:
                    default_target_path: mission 
                    use_referer: true
                    target_path_parameter: redirect_url
                    login_path: login
                    check_path: login
                entry_point: form_login
                access_denied_handler: App\Security\AccessDeniedHandler
                custom_authenticator: App\Security\CustomAuthenticator
    
    Run Code Online (Sandbox Code Playgroud)

    为了使身份验证警告更容易理解,请使用CustomAuthenticator制作者捆绑包创建一个新的。现在,您可以将旧的身份验证器与新的身份验证器进行比较,并将新方法放入旧的身份验证器中。您需要进行一些更改。

就是这样。大多数弃用现在应该得到解决。