我有以下.htaccess文件:模板工具包找不到模板文件
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_URI} !/views/.*/.*\.html
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/(.*)$ index.pl?controller=$1&action=$2&id=$3
這讓我像/用戶/顯示/ 1請求轉發到我的主控制器。我也可以訪問模板文件;至少在我的瀏覽器,我可以打開文件:
/views/Users/add.html
然而,當我嘗試訪問該文件在我的控制器時,我想呈現模板,它不能被發現(沒有這樣的文件或目錄)
這是我嘗試呈現模板代碼:
package UsersController;
use Moose;
use Controllers::ControllerRole;
use Template;
with 'ControllerRole';
has 'example' => (
is => 'rw',
isa => 'Str',
default =>'test',
);
sub show {
my $self = shift;
my $id = $self->{params}->{id};
my $config = {
INTERPOLATE => 1, # expand "$var" in plain text
POST_CHOMP => 1, # cleanup whitespace
PRE_PROCESS => 'header', # prefix each template
EVAL_PERL => 1, # evaluate Perl code blocks
};
my $vars = {
id => $id,
};
my $template = Template->new();
$template->process('views/Users/add.html', $vars) || die "$!";
}
1;
我還使用絕對或相對路徑嘗試過,但阿帕奇抱怨說,這是不允許的
它可能以有益的,看看我的項目的文件結構:
更新: 如果我使用chdir
我可以open
與Perl的open函數的文件,而是試圖處理文件我仍然得到錯誤
file error - header: not found
這裏是一個第二iterati在我的代碼:
sub show {
my $self = shift;
chdir '/srv/http/perlweb';
my $id = $self->{params}->{id};
my $config = {
INTERPOLATE => 1, # expand "$var" in plain text
POST_CHOMP => 1, # cleanup whitespace
PRE_PROCESS => 'header', # prefix each template
EVAL_PERL => 1, # evaluate Perl code blocks
ABSOLUTE => 1,
RELATIVE => 1,
};
my $vars = {
id => $id,
planet => 'earth',
captain => 'kirk',
};
open my $fh, "views/Users/add.html" or die "$!"; #this works
close $fh;
my $tt = Template->new($config);
$tt->process('views/Users/add.html', $vars) or die $tt->error(); # this does not work
}
同樣,你是否嘗試過在任何地方設置['INCLUDE_PATH'](https://metacpan.org/pod/Template#INCLUDE_PATH)? – ThisSuitIsBlackNot 2014-10-09 16:17:28
是的,ID做到了這一點 – Luke 2014-10-09 16:18:05
你設置了什麼?你仍然得到同樣的錯誤?當你使用'INCLUDE_PATH'時,你有'ABSOLUTE'和'RELATIVE'兩個選項嗎? – ThisSuitIsBlackNot 2014-10-09 16:21:06