Как переопределить метод Mojolicious :: Controller-> new - PullRequest
1 голос
/ 09 ноября 2019

Давайте предположим, что у меня есть контроллер 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, но не могу понять, что мне нужно сделать, чтобы заставить это работать.

Как мне реализовать что-то вродеэто?

...