【问题标题】:Using class constants in Symfony routing在 Symfony 路由中使用类常量
【发布时间】:2015-03-15 00:26:42
【问题描述】:

我有一个使用注释定义的路由,如下所示:

/**
 * @Route("/doSomething/{param}", name="route_name", defaults={"param"=1})
*/

是否可以使用类常量代替这个硬编码的“1”,例如:

/**
 * @Route("/doSomething/{param}", name="route_name", defaults={"param"=MyBundle:MyEntity:DEFAULT_TYPE})
*/

(当然上面的失败了)

【问题讨论】:

标签: php symfony routing


【解决方案1】:

是的,您可以在注释中使用常量,只需使用类的 FQN:

/**
 * @Route("/doSomething/{param}", name="route_name", defaults={"param"=Namespace\MyBundle\MyEntity::DEFAULT_TYPE})
*/

如果你在同一个命名空间,或者你导入了持有常量的类,你可以缩短它:

use Namespace\MyBundle\MyEntity;

/**
 * @Route("/doSomething/{param}", name="route_name", defaults={"param"=MyEntity::DEFAULT_TYPE})
*/

【讨论】:

  • 对不起,我遇到了网络问题,它做错了。我现在已经赞成你的答案!谢谢,很好的建议,但是,只有一件坏事 - 你必须定义 FQN,实际上......无论如何,这工作 0K!
  • 你可以在 PHP 代码中导入类来缩短它。
  • 即使使用name 参数:name="{MyEntity::ROUTE_NAME}" 也有效。然而,如果你尝试重定向它,$this->redirectToRoute(MyEntity::ROUTE_NAME),symfony 会抛出一个异常,指出这样的路由不存在。奇怪。
  • @DamagedOrganic 您的解决方案并不是真正“有效”。您将常量作为文字字符串。像name=MyEntity::ROUTE_NAME 这样插入不带引号的常量实际上会起作用
猜你喜欢
  • 2017-04-02
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多