【问题标题】:Symfony's link_to helper method ignores the third argumentSymfony 的 link_to 辅助方法忽略了第三个参数
【发布时间】:2023-12-28 23:19:02
【问题描述】:

我正在尝试使用 Symfony 路由系统在导航菜单中生成与环境无关的链接。我在routing.yml 有以下路线:

# Navigation menu rules
sample:
  class:   sfDoctrineRouteCollection
  options: { model: Sample }

# Default rules (catch all)
homepage:
  url:    /
  param:  { module: sample, action: index }

default_index:
  url:   /:module
  param: { action: index }

default:
  url:   /:module/:action/*

在导航菜单中,我对link_to辅助方法有如下调用,根据实际部分自定义:

<?php
...
if ( $actualSection === 'sample' )
    echo link_to('Sample', 'sample', array('class' => 'actualSection'));
else
    echo link_to('Sample', 'sample');

...
?>

问题是link_to 正在生成如下链接:

<a href="/sample?class=actualSection">Samples</a>

而不是

<a href="/sample" class="actualSection">Samples</a>

在路由系统中使用link_to辅助方法以生成后一个链接的正确方法是什么?

根据link_to documentation内部的URI应该写成'module/action'格式,所以我猜最初的/可以省略。

【问题讨论】:

    标签: php symfony1 routing hyperlink helper


    【解决方案1】:

    您的第二个论点似乎不正确。要么你输入一个以'@'为前缀的路由名称(如@sample_index或sfDoctrineCollection生成的任何路由),要么使用“模块/动作格式”=>sample/index

    【讨论】:

    • 谢谢!我假设'sample' 直接指向'sample/index',但这仅在使用default_index 路由时才成立。
    • 是的。在这种情况下,我认为@elitalon 只需要一个额外的“@”:echo link_to('Sample', '@sample', array('class' =&gt; 'actualSection'));
    • 在为路由提供参数时,我无法在 1.4.12 中使用此功能。(在 1.4.20 中也没有。) link_to() 方法检查第二个参数中是否有“@”字符并使用 link_to1() 函数。但是,这不接受仅参数数组选项。它永远不会传递给它。使用link_to2()函数解决了问题
    【解决方案2】:

    试试这样的:

    echo link_to('Sample', 'sample', array(), array('class' => 'actualSection'));
    

    第一个数组 - 路由选项,第二个 - html 的属性

    【讨论】:

    • +1,这没有记录是代码,但如果你看link_to2()的参数似乎是真的
    最近更新 更多