Есть ли способ/функция для записи подпрограммы/метода автозапуска для всех доступных Mojolicious маршрутов?Mojolicious autostart/init() подпрограмма
Возможно, это автоматический помощник, но я еще не знаю, как это сделать.
Я думаю, что это особенно полезно для инициализации соединения с базой данных $ Self -> {ДБГ} почти каждый доступных маршрутов, ... так что я могу написать так:
helper DB => sub { state $dbh = Database->new };
get '/' => sub {
my $self = shift;
//$self->{dbh} // is automatically initialized & shared
};
get '/another_route' => sub {
my $self = shift;
//$self->{dbh} // also initialized & shared
};
вместо:
get '/' => sub {
my $self = shift;
$self->{dbh} = init_db();
};
get '/another_route' => sub {
my $self = shift;
$self->{dbh} = init_db();
};
PS: Я использую Mojolicious: Lite, Perl 5,16, SQLite3
Да, вы правы, но знаете ли вы, как напрямую обращаться к $ self -> {dbh} вместо $ self-> DB -> {dbh} в Mojolicious helper? или, возможно, интерфейса еще нет? – dns
Прежде всего, доступ к данным экземпляра напрямую игнорируется в ООП. Perl (и большинство языков сценариев) не может принудительно вводить частные данные, но вы должны уважать его по дизайну. Во-вторых, invocant к обратным вызовам маршрута является новым экземпляром Mojolicious :: Controller, поэтому нет, вы не можете предварительно заполнить данные экземпляра, даже если хотите. Используя «состояние» в помощнике, вы делаете постоянный экземпляр соединения с базой данных (см. Также DBIx :: Connector), и вызов метода 'db' в моем примере будет извлекать этот экземпляр. –