uri_for和uri_for_action之间的区别

时间:2012-03-27 07:05:16

标签: perl catalyst

Catalyst的$c->uri_for$c->uri_for_action方法之间有什么区别。

使用哪一个?为什么?

3 个答案:

答案 0 :(得分:4)

#catalyst中的

dpetrov_说:

  

如果路径可能会发生变化,uri_for_action就更好了。

答案 1 :(得分:4)

@Devendra我认为如果有人阅读它们,你的例子可能会有某种误导。

uri_for期望路径(而不是行动)。它返回一个绝对URI对象,因此例如它对链接到静态内容很有用,或者如果你不希望你的路径发生变化。

例如,假设您已在域example.com和subdir abc(example.com/abc/)上部署了您的应用程序:$c->uri_for('/static/images/catalyst.png')将返回example.com/abc/static/images/catalyst .pn,或者例如:$c->uri_for('/contact-us-today')将返回example.com/abc/contact-us-today。如果您稍后决定将您的应用程序部署在另一个子目录下,或者/您仍将使用正确的链接。

请说明您的联系我们行动如下:sub contact :Path('/contact-us-today') :Args(0) {...}您之后决定/今日联系我们应该成为/联系我们。如果您使用了uri_for('/contact-us-today'),则需要查找并更改指向此网址的所有行。但是,您可以使用$c->uri_for_action('/controller/action_name')来返回正确的网址。

答案 2 :(得分:1)

我在$c->uri_for$c->uri_for_action

之间发现了以下差异

考虑

Othercontroller.pm

__PACKAGE__->config(namespace => 'Hello');

.  
.   
.  

sub bar: Local{

$c->res->redirect($c->uri_for('yourcontroller/method_name'));

$c->res->redirect($c->uri_for_action('yourcontroller/method_name'));

}

Yourcontroller.pm

sub method_name: Local{

print "In Yourcontroller:: method_name"

}

如果$c->uri_for网址更改为

http://localhost:3000/Hello/yourcontroller/method_name

但是对于$c->uri_for_action,网址会更改为

 http://localhost:3000/yourcontroller/method_name

因此,uri_for

会添加名称空间