Давайте предположим, что у меня есть контроллер Mojo с virtual-esque методом 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');
}
...
I хочу чтобы иметь возможность внедрять или вызывать метод init при создании экземпляра Controller, но, похоже, не может понять, как это сделать.
Сначала я хотел просто переопределить метод 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, но не могу понять, что мне нужно сделать, чтобы заставить это работать.
Как мне реализовать что-то вродеэто?