1

我想知道是否可以从 Perl 催化剂中的模板调用子例程并将值传递给该子例程。

子程序:

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',[])%]

请告诉我

4

2 回答 2

0

对所提供的示例进行 Catalyst 调度过程似乎有点过头了。通过创建一个模板插件来处理 ceil 函数,或者通过 TemplateUSE 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()

于 2013-11-13T02:49:51.723 回答
0

我认为你不能。你只能从模型中调用一个子程序。

[% Catalyst.model('xxx').yyy('param1','param2') %]
于 2013-11-11T08:10:03.740 回答