Symfony 5 @required 注释在 setter 注入期间出现奇怪的缓存问题?

Symfony 5 @required annotation weird caching issue during setter injection?

我在 Symfony 5 中发现了这个奇怪的问题,我认为它与 docker 和 Symfony 本身有关。

我的设置

docker-compose.yml

version: '3.7'
services:
  webapp:
    build:
      context: ./php/
      dockerfile: Dockerfile
    container_name: webapp
    image: php:7.4.1-fpm-alpine
    volumes:
      - ../:/srv/app
  apache2:
    build:
      network: host
      context: ./apache2/
      dockerfile: Dockerfile
    container_name: apache2
    image: httpd:2.4.39-alpine
    ports:
      - 8080:80
    volumes:
      - ../:/srv/app
  mysql:
    container_name: mysql
    image: mysql:latest
    ports:
      - 13306:3306
    volumes:
      - mysql:/var/lib/mysql:cached
    environment:
      MYSQL_ROOT_USER: XXX
      MYSQL_ROOT_PASSWORD: XXX
      MYSQL_DATABASE: XXX
      MYSQL_USER: XXX
      MYSQL_PASSWORD: XXX
  redis:
    container_name: redis
    image: redis:5.0.6-alpine
    ports:
      - 16379:6379
    volumes:
      - redis:/data:cached

volumes:
  mysql:
    driver: local
  redis:
    driver: local

对于框架,我当然使用 Symfony 5。我很确定这个设置是正确的,因为我在我的其他 Laravel 项目中使用了类似的东西并且它工作得很好。

问题

在我的特质上,我使用了 @required 注释。更确切地说,我在这样的 setter 上使用它:

    /**
     * Get the current request out of RequestStack object.
     *
     * @param RequestStack $requestStack
     * @required
     */
    public function setRequest(RequestStack $requestStack): void
    {
        $this->currentRequest = $requestStack->getCurrentRequest();
    }

我知道这一点很好,因为它在以前的版本中一直有效。问题似乎出在 @required 注释中。我不确定为什么,但每次添加它时我都会得到:

看起来服务器有问题,但是一旦我手动清除缓存它就可以工作,然后在另一个调用之后(并更改代码和邮递员调用中的某些内容,如查询参数的内容)它再次中断直到我删除 @required 或清除缓存。

我很困惑 - 我不确定这是否与我的 docker 设置有关,或者 Symfony 的缓存机制中存在错误,或者它可能是我所有怀疑的组合,甚至更多。

我敢打赌是 Symfony 缓存中的错误,或者我设置 docker 的方式有问题。然而,我才刚刚开始做这件事,此时我什至没有连接到数据库,这些实际上是重写该项目的第一步,所以没有发生任何奇怪的事情。

大家怎么看?有人以前见过类似的东西吗?

我尝试了什么

我确实尝试过清除缓存,删除并添加该注释我确实尝试重新启动我的 docker,我确实修剪了整个东西并进行了全新的设置。到目前为止没有任何效果。

2020 年 1 月 30 日更新 19:45

我确实尝试了直接在控制器上进行相同的 setter 注入,但我无法重现错误。我认为出于某种原因它不喜欢它的特性。

我的问题的答案是升级。就像 Cerad 在他的评论中提到的那样 - 将 PHP 从 7.4.1 更新到 7.4.2 可以解决问题并且确实如此。

如果您使用的是 Symfony 5,请确保您拥有 PHP 7.4.2 以避免此特定问题。