如何在 Symfony 中正确查找、监控和处理弃用的方法调用?

How to correctly find, monitor and handle deprecated method calls in Symfony?

我刚刚将 Symfony 2.7 项目更新到 2.8。现在我正准备将项目更新到 Symfony 3。配置文件显示,每个请求都使用了大量(超过 1500)已弃用的 methods/classes。

我当然想解决这些问题。但是据我所知,不推荐使用的代码是 Symfony 本身使用的,而不是我自己的代码。

这是一个例子:

ConfigCache::__toString() is deprecated since version 2.7 and will be removed in 3.0. Use the getPath() method instead. (4 times)

    ConfigCache::__toString() (called from AllowedMethodsRouterLoader.php at line 51)
    AllowedMethodsRouterLoader::getAllowedMethods() (called from AllowedMethodsRouterLoader.php at line 51)
    AllowedMethodsRouterLoader::getAllowedMethods() (called from AllowedMethodsListener.php at line 41)
    AllowedMethodsListener::onKernelResponse()
    call_user_func() (called from WrappedListener.php at line 61)
    WrappedListener::__invoke()
    call_user_func() (called from EventDispatcher.php at line 184)

    ...a lot more Twig calls...

    Twig_Template::displayWithErrorHandling() (called from Template.php at line 347)
    Twig_Template::display() (called from Template.php at line 358)
    Twig_Template::render() (called from TwigEngine.php at line 50)
    TwigEngine::render() (called from TwigEngine.php at line 72)
    TwigEngine::render() (called from TwigEngine.php at line 97)
    TwigEngine::renderResponse() (called from Controller.php at line 185)
    Controller::render() (called from RegistrationController.php at line 71)

    RegistrationController::registerAction()

    call_user_func_array() (called from HttpKernel.php at line 144)
    HttpKernel::handleRaw() (called from HttpKernel.php at line 64)
    HttpKernel::handle() (called from ContainerAwareHttpKernel.php at line 69)
    ContainerAwareHttpKernel::handle() (called from Kernel.php at line 185)
    Kernel::handle() (called from app_dev.php at line 37)

当然我自己的代码也参与了这个调用堆栈:RegistrationController 处理请求并使用 Twig 模板呈现页面。但是,使用已弃用的 ConfigCache::__toString() 方法的代码来自 AllowedMethodsRouterLoader class,它是 Symfony 的一部分。

我的代码可以做些什么来避免这个弃用的代码吗?

我很惊讶,Symfony 代码本身使用了已弃用的代码。有什么方法可以过滤掉这些消息,只在我自己的代码中收到有关弃用的通知吗?

它是 运行 已弃用的代码 - 在 Symfony 代码库中,但它是从 Twig 调用的。由于 Twig 是 Symfony 的第一个 class 部分,但不是 Symfony 项目的正式部分,它有自己的版本。更新版本的 Twig 以及其他库将删除已弃用代码的使用,或者至少做了一些改进状态的事情。

因此,更新基于 Symfony 框架的项目的很大一部分也更新了其他正在使用的库。仅更新 composer.json 中的 "symfony/symfony" 行是不够的。

您可能对 Sensio Labs(Symfony 的创建者)的 Deprecation Detector 感兴趣。

Deprecation Detector on Github

我用它来移除 2.8 中已弃用的 classes/methods 准备迁移到 3.0。非常节省时间。强烈推荐。

我还建议 Symfony Upgrade Fixer 以节省更多时间,尤其是在表单 类 方面。