18. use Mojolicious::Lite;
get '/' => 'about/what' ;
get '/who' => 'about/who' ;
get '/what' => 'about/what' ;
get '/where' => 'about/where';
get '/code' => 'about/code' ;
app->log->level('error');
app->start;
56. package App;
use Mojo::Base 'Mojolicious';
has conf => sub { do 'conf/app.conf' };
has db => sub { use Util; Util->db(
do 'conf/mysql.conf'
) };
sub startup { ... }
57. use DBI 1.58; use DBD::mysql 4.004; use DBI::Util;
return DBI->connect(DBI::Util::_parse_cfg(
$conf,
{
RootClass => 'DBI::Util',
mysql_enable_utf8 => 1,
mysql_auto_reconnect => 1,
}
));
77. package App::Index;
use Mojo::Base 'Mojolicious::Controller';
use common::sense;
use App::News;
use App::Book;
use App::Audio;
has news => sub { App::News->new(%{ +shift }) };
has book => sub { App::Book->new(%{ +shift }) };
has audio => sub { App::Audio->new(%{ +shift }) };
78. package App::Index;
use Mojo::Base 'Mojolicious::Controller';
use common::sense;
use App::News;
use App::Book;
use App::Audio;
__PACKAGE__->attr(news => sub { App::News->new
(%{ +shift }) });
__PACKAGE__->attr(book => sub { App::Book->new
(%{ +shift }) });
__PACKAGE__->attr(audio => sub { App::Audio->new
(%{ +shift }) };
83. package App::Book;
use App::Base -controller;
sub check { ... } # для bridge
sub list { ... }
sub item { ... }
sub _list { ... } # возращает данные
84. sub check {
my $self = shift;
return 0 unless my $book = $self->dw->book(
$self->db->select(
'select * from book where name=? limit 1',
$self->stash('book_name')
)
)->[0];
$self->stash(book => $book);
return 1;
}
85. sub item {
my $self = shift;
my $book = $self->stash('book');
...
}
# роутеры
my $bn = $r->bridge('/book/:book_name')
->to('book#check');
$bn->route->to('book#item')->name('book');
103. # App::Admin::Book
sub add {
my $self = shift;
return $self->form unless $self->validate->book;
# работа с полученными данными
}
sub edit {
my $self = shift;
my $item = $self->stash('item'); # через bridge
return $self->form unless $self->validate->book;
...
}