【问题标题】:Symfony - Cache key contains reserved charactersSymfony - 缓存键包含保留字符
【发布时间】:2018-02-07 12:20:13
【问题描述】:

我使用的是 Symfony 3.4.4,使用 FOSUser 包进行简单安装。我创建了基于用户实体的简单表单:

$editForm = $this->createForm('Company\AdminBundle\Form\UserEditType', $user);
$editForm->handleRequest($request);

表单只有两个输入:

$builder
    ->add('name', TextType::class, ['label' => 'name and surname'])
    ->add('department', TextType::class, ['label' => 'department']);

当我在$editForm->handleRequest($request) 上提交表单(我正在发送姓名、部门和令牌)时,我遇到了异常:

request.CRITICAL: 未捕获的 PHP 异常 Symfony\Component\Cache\Exception\InvalidArgumentException: "缓存键 "myuser.email@address.com" 包含保留字符 {}()/\@:" at /Sites/project/ vendor/symfony/symfony/src/Symfony/Component/Cache/CacheItem.php 第 162 行 {"exception":"[object] (Symfony\Component\Cache\Exception\InvalidArgumentException(code: 0): Cache key \"myuser. email@address.com\" 包含保留字符 {}()/\@: at /Sites/project/vendor/symfony/symfony/src/Symfony/Component/Cache/CacheItem.php:162)"} []

它只发生在 prod env 上,在 dev 上它工作得很好。 我不知道,没有自定义缓存配置,没有额外的缓存包等。带有 PHP 7.1 的 OSX localhost apache。

【问题讨论】:

  • 当然尝试过缓存:已经清除,没有帮助。
  • @goto 是,使用 env=prod

标签: php symfony caching symfony-3.4


【解决方案1】:

你应该看这里:https://github.com/php-cache/issues/issues/49

适用于 0.4.3 的缓存/缓存包。 0.4.4 坏了。您可以更改缓存捆绑版本。

【讨论】:

  • 我已将 "cache/cache-bundle": "0.4.3" 添加到 composer 并使用 new Cache\CacheBundle\CacheBundle(), 更新了 AppKernel $bundles 数组。稍后清除生产缓存,但没有区别。也许我应该做一些额外的 config.yml 的东西,但不是很清楚。
【解决方案2】:

所以问题出在稍微不同的地方。在我的User 实体中,我的email 属性设置如下:

/**
 * @var string
 * 
 * @Assert\Valid
 */
protected $email;

@Assert\Valid 有问题,只是不知道为什么(尽管我不知道为什么只使用了Valid,而不是Email() 等,但现在没关系)。 解决方案很简单,去掉这个断言或者用@Assert\Email()替换它。

正如我所写,我不知道为什么会导致这样的错误。你可以在这里查看和阅读问题 - https://github.com/symfony/symfony/issues/26313

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2016-05-06
    • 2012-04-03
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多