【发布时间】:2022-03-16 19:41:38
【问题描述】:
我正在尝试提供包含在控制器类的__DATA__ 部分中的模板,但它似乎不起作用。
在我的主要app.pl 文件中,我有
#!/usr/bin/env perl
use Mojolicious::Lite -signatures;
use FindBin qw($Bin);
use lib "$Bin/lib";
push @{app->renderer->classes}, 'Zairyo::Controller::Data';
push @{app->preload_namespaces}, 'Zairyo::Controller::Data';
get '/:uid' => [uid => qr/[a-z0-9]{32,32}/i ] => { controller => 'Data', action => 'serve_iframe' };
app->start;
在Zairyo::Controller::Data:
package Zairyo::Controller::Data;
use Mojo::Base 'Mojolicious::Controller', -signatures;
sub serve_iframe ($c) {
$c->render(template => 'foo');
}
__DATA___
@@ foo.html.ep
what is this
我希望按照documentation 工作,但会在浏览器上抛出错误Could not render a response...,在日志上抛出Template "foo.html.ep" not found。
我已经解决了这个问题
$c->render(inline => data_section(__PACKAGE__, 'foo.html.ep') );
但这似乎有点骇人听闻。
我在这里做错了什么?
【问题讨论】:
-
你的问题有什么混淆吗?您使用相同的
render调用来表示它不起作用并且确实起作用。如果您预加载Zairyo::Controller::Data类会发生什么,因为文档说“请注意,要检测模板,这些类需要在调用warmup之前已经加载和添加” -
如果
Zairyo/Controller/Data.pm文件位于当前目录中,您可能需要将use lib '.'添加到脚本中 -
我也不确定
app->preload_namespaces电话,我找不到任何使用它的例子。而是试试这个:push @{app->routes->namespaces}, 'Zairyo::Controller';注意:没有尾随::Data因为命名空间应该是一个目录,我假设Data.pm是Zairyo/Controller/目录中的一个文件 -
@briandfoy 是的 - 抱歉,我使用了有效的代码。固定的
标签: perl mojolicious