这条路线有什么问题?

时间:2011-02-05 18:44:19

标签: symfony1 url-routing

嘿。 我打算为我的菜单组件制作一个“当前”类,创建菜单。为了找出当前的类,建议使用$this>getContext()->getRouting()->getCurrentRouteName();。为此,我必须为将要存在的所有菜单元素设置路由。

让我们说到目前为止我有两个元素,一个用于首页,一个用于客户。每当我浏览首页时,无论操作和参数是什么,我都希望上面的代码返回“frontpage”。客户也一样。

我现在的客户规则如下: routing.yml中

customer:
  param: { module: customer }

我认为设置网址并不重要,我已经将模块指定为客户。无论使用何种操作,menu元素都应具有“current”类。

我如何链接:

if ($current == $name){
    echo link_to($name, $link, array("class" => "selected"));
}else {
    echo link_to($name, $link);
}

现在转到“customer / some_action”的链接($ link)不起作用,它们只显示为“/”。所以我想在$ link周围使用url_for,这也不起作用,结果相同。

我的路由规则一定有问题...因为当我输入时手动说/ customer / new,我可以看到该页面。如果我从模板中写出$this>getContext()->getRouting()->getCurrentRouteName();,则表示默认。所以我的规则绝对不起作用。我也尝试了其他规则,但没有任何人工作。诀窍是制定一个适用于模块客户下的任何规则的规则。

是的,我在更改了每个规则后清除了缓存。

非常感谢。

编辑: 我使路由规则有效,但不适用于客户模块下的所有操作。我必须为每个动作制定规则。但是,链接仍然被打破,他们显示“/".

我的新规则:

customer_index:
  url:   /:module
  param: { module: customer, action: index }

customer_new:
  url:   /:module/:action
  param: { module: customer, action: new }

这些链接都不起作用: echo link_to("Customers", "@customer_index", array("module" => "customer"));

echo link_to("New customer", "@customer_new", array("module" => "customer"));

1 个答案:

答案 0 :(得分:1)

是的,这也是我几次完成它的方式。您需要单独的路由规则才能使用getCurrentRouteName()。

您对链接的问题是您无法以这种方式传递“module”参数。它不是Symfony link_to() helper的有效参数。相反,你可以这样传递它:

link_to('Customers', '@customer_index?url_variable=something');

customer_index:
  url:   /:url_variable
  param: { module: customer, action: index, url_variable: some_default_value }

默认值是可选的,但是如果您没有传递变量并且路由没有默认值,则link_to帮助器将抛出错误。

另外,只需指出这一点,因为上面的代码中有两次错误:

$this>getContext()->getRouting()->getCurrentRouteName();
...should be:
$this->getContext()->getRouting()->getCurrentRouteName();