如何在路由 YAML 中使用 PHP 常量

问题描述

我使用的是 Symfony 3.4

我设法让 PHP 常量为服务工作(如文档中所述)。但我不知道如何让它在路由文件中工作。这是我目前所拥有的。

实体:

namespace CompanyName\AppBundle\Entity\SomeDirectory;

class MyEntity
{
    public const STATUS__CREATED = 1;
}

routing.yml:

view_my_entity_with_status_created:
  path:       /created/
  defaults:
    _controller: "AppBundle:SomeOtherDirectory/Something:index"
    status: !PHP/const CompanyName\AppBundle\Entity\SomeDirectory\MyEntity::STATUS__CREATED

SomethingController

public function indexAction(?int $status = null): Response
{
 // ...
}

据我所知,!PHP/const 被忽略,因为状态始终为空。

解决方法

你不能在 Symfony 3.4 中。

路由 YAML 配置文件中使用 !php/const 直到 Symfony 4.1 才被启用。

虽然该功能在 3.2 中被添加到 YamlFileLoader 中,但默认情况下仅为依赖注入组件启用,而不为路由组件启用。

This 是功能合并的时间。

,

根据您的 symfony 版本,这可以通过特定的错字来完成:

https://symfony.com/blog/new-in-symfony-3-2-php-constants-in-yaml-files

在 3.2 之前是不可能的 从 3.2 到 3.4

arguments:
            - '@app.other_service'
            - !php/const:AppBundle\Entity\BlogPost::MUM_ITEMS
            - !php/const:Symfony\Component\HttpKernel\Kernel::VERSION

3.4 之后:

arguments:
            - '@app.other_service'
            - !php/const AppBundle\Entity\BlogPost::MUM_ITEMS
            - !php/const Symfony\Component\HttpKernel\Kernel::VERSION

对于您的路由文件:

# config/routes.yaml
blog_list:
    path:       /blog/{page}
    controller: AppBundle:SomeOtherDirectory/Something:index
    defaults:
        status: !php/const CompanyName\AppBundle\Entity\SomeDirectory\MyEntity::STATUS__CREATED

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...