我想知道是否可以从Perl催化剂中的模板调用子例程,并将值传递给该子例程。
subrountine:
sub get_ceil : Private{
my ( $self, $c, $param ) = @_;
my $value = ceil($param);
$c->stash->{ceil} = $value;
}
模板: [%ceil = $ c-> forward('/ vbo / my_goals / mortgage_reduction_program / get_ceil',[])%]
请告诉我
答案 0 :(得分:0)
我认为你不能。你只能从Model中调用一个子程序。
[% Catalyst.model('xxx').yyy('param1','param2') %]
答案 1 :(得分:0)
对所提供的示例进行Catalyst调度过程似乎有点矫枉过正。通过创建模板插件来处理ceil函数,或者通过模板USE var = Class(module)
构造,可以非常直接地执行您需要的操作。
最终产生或多或少相同的效果。
=== Template/Plugin/MyFunc.pm ===
package Template::Plugin::MyFunc;
use base 'Template::Plugin';
our $VERSION = 0.01;
use strict;
use warnings;
sub new {
my ($class, $context) = @_;
bless {
_CONTEXT => $context,
}, $class;
}
sub ceil {
my ($self, $param) = @_;
return ceil($param)
}
sub other_func {
... etc
}
1;
=== some template ===
[% USE MyFunc %]
<td>[% MyFunc.ceil(some_param) %]</td>
我还没有研究过它,但是如果没有模板插件可以在CPAN上执行ceil()
,floor()
之类的功能,我会感到惊讶。