perl - 如何覆盖 Mojolicious::Controller->new 方法
问题描述
假设我有一个 Mojo 控制器,里面有一个虚拟的方法init
。
package App::Controller
use Mojo::Base 'Mojolicious::Controller';
sub init {
my $self = shift;
# Do things with $self->param('myparam');
}
...
我想扩展它并对init
方法进行更改。
在这个例子中,我创建了一个子类App::Controller::Person
,我想从参数中提取一个值并用它做一些不同的事情。
package App::Controller::Person;
use parent 'App::Controller';
sub init {
my $self = shift;
# Do different things with $self->param('myparam');
}
...
我希望能够在实例化控制器时注入或调用 init 方法,但似乎无法弄清楚如何去做。
最初,我想通过执行以下操作来覆盖new
方法App::Controller
:
package App::Controller
use Mojo::Base 'Mojolicious::Controller';
sub new {
my ($class, @args) = @_;
my $self = $class->SUPER::new(@args);
$self->init();
return $self;
}
但我没有任何运气。我猜我没有正确地将事情传递给 SUPER,但似乎无法弄清楚我需要做什么才能让它工作。
我该如何实施这样的事情?
解决方案
推荐阅读
- android - 无法在日期选择器中使用参数
- postgresql - 从 Pentaho 数据集成迁移到 Talend 数据集成/大数据
- ssl - 卷曲没有击中指定的网址
- css - 使用自动列使元素跨越网格上的所有列
- java - 有没有办法增加退出过渡的持续时间?
- angular - 从模板中设置表单控件的值
- regex - 正则表达式逐行匹配并在出现特定字符串时停止
- angular - 如何在 Angular 单元测试中对子组件执行方法
- marklogic - 得到“
: VirtualFree() 中的错误:”markLogic 中的相关错误 - python - 使用 spark submit 提交自定义 udf 时输入错误