Catalyst的$c->uri_for
和$c->uri_for_action
方法之间有什么区别。
使用哪一个?为什么?
答案 0 :(得分:4)
答案 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
考虑
__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'));
}
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
。