在 Catalyst 中显式调用视图

Explicit calling a view in Catalyst

正在阅读http://search.cpan.org/~ether/Catalyst-Manual-5.9009/lib/Catalyst/Manual/Tutorial/02_CatalystBasics.pod我看到了$c->stash(template => 'hello.tt');

模板有了,视图在哪?为什么没有明确指定视图?

另外:如何显式调用视图(而不是通过模板名称)?

这可能有点棘手,因为它是极其灵活和简单的 DWIW 的组合。模板名称中的 .tt 表示 Template::Toolkit 是假定的默认值。根本没有必要使用此视图,但在大多数文档中都会使用它。

您可以通过转发到视图来呈现存储/$ctx 中的任何内容:例如 $c->forward($c->view("JSON"));,或者您可以像这样决定请求周期的其余部分 $c->stash( current_view => "CSV" ).当然,您必须在应用程序中安装和配置视图。也可以直接使用views-

my $body = $c->view("Xslate")->render($c, "folder/email_template.tx", $params);

一个棘手的部分是您的 end 方法将做什么。

一般推荐的默认值为Catalyst::Action::RenderView。它很聪明(如果你想改变它的行为,它也是灵活的)。例如,如果您设置了重定向,它不会呈现页面,它只会进行重定向。如果您已经生成 $c->response->body 内容,它也会 "just stop" 并相信您已经完成的就是您想要的。

灵活性非常复杂,我真的建议在重新启动的开发服务器中放置一个玩具应用程序 运行 并尝试所有你想更好地理解的东西。 None 它本身就很难,但除非您将其分解成可消化的块,否则这一切都会造成混乱。