【问题标题】:Specifying custom data in Symfony Routing Annotation在 Symfony Routing Annotation 中指定自定义数据
【发布时间】:2020-06-26 19:13:33
【问题描述】:

我正在使用 symfony 5,并将路由指定为注释。所以现在我需要在路由中传递一些额外的数据。它不是路由的一部分,但我需要为每个路由设置一个值。因此,我使用选项对象options={"label"="COMMMON_CLIENTMANAGEMENT"} 指定如下路线。

它没有产生错误。所以我不确定它是否有效。我也无法从任何路由服务中检索数据。

 *   
 * @Route("/client/list", name="client_list", options={"label"="COMMMON_CLIENTMANAGEMENT"})
 * @return \Symfony\Component\HttpFoundation\Response
 */   

我想根据这些数据创建一个html,就像<li href="{{path(route)}}">{{ label }}</li>

【问题讨论】:

  • 我想这取决于您需要可用数据的范围。如果您在控制器中需要它,也许您可​​以使用额外的参数。喜欢这里:symfony.com/doc/current/routing.html#extra-parameters
  • 也许我在这里遗漏了一些东西,但是如果你需要传递的数据不是路由的一部分,为什么你首先需要在注释中指定它?为什么不在控制器动作的方法中定义一个变量呢?
  • @patrick3853 我正在实现一些东西,我需要根据路由在 html 中创建一些链接。所以我在options.label 中设置的数据将是href 的文本。喜欢<li href="{{path(route)}}">{{ label }}</li>
  • 您考虑过只添加翻译吗?喜欢 ...{{ route|trans }} 并在您的翻译文件中为每条路线添加标签?甚至可以为此使用不同的域,这样它就不会与其他翻译冲突,以防万一。然后将是{{ route|trans({}, 'route_labels') }}。如果你碰巧在某个时候翻译了它,它也会缩放。

标签: php symfony symfony4 symfony5 php-7.4


【解决方案1】:

更新:

所以我做了更多的实验,因为我收集的目的是在列出路线时使用“标签”数据。我认为使用默认部分仍然更容易,但您可以使用路由集合访问选项信息:

class PlayCommand extends Command
{
    protected static $defaultName = 'app:play';

    private RouterInterface $router;

    public function __construct(RouterInterface $router)
    {
        parent::__construct();
        $this->router = $router;
    }
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $routes = $this->router->getRouteCollection();
        $route = $routes->get('index');
        $label = $route->getOption('label');

不确定是否有办法从树枝内部直接获取路线,但为此编写树枝扩展很容易。

原答案:

defaults 部分用于提供附加信息。

我很难在选项部分找到文档。这个blog article 讨论了一些新选项,例如 utf-8 支持。我认为选项部分由路由器使用。不积极。

    /**
     * @Route("/", name="index", options={"label"="COMMMON_CLIENTMANAGEMENT"})
     */

【讨论】:

  • assume OP 想要循环通过一些路由集合并访问那里的标签,评论中的示例(带有
  • )似乎暗示...跨度>
猜你喜欢
相关资源
最近更新 更多
热门标签