私はMojolicious::Guides::Growingのセクションを読んでいます。Mojolicious :: Liteを「うまく構成された」cpan-uploadableアプリケーションに成長させる方法を教えています。まず、M :: Lアプリを起動スクリプトとアプリケーションクラスに分割するように指示します。mojoliciousでルーティングとコントローラの動作を分離するのはなぜですか?
package MyApp;
use Mojo::Base 'Mojolicious';
use MyUsers;
sub startup {
my $self = shift;
# ...auth stuff omitted...
my $r = $self->routes;
$r->any('/' => sub {
my $self = shift;
my $user = $self->param('user') || '';
my $pass = $self->param('pass') || '';
return $self->render unless $self->users->check($user, $pass);
$self->session(user => $user);
$self->flash(message => 'Thanks for logging in.');
$self->redirect_to('protected');
} => 'index');
$r->get('/protected' => sub {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
});
$r->get('/logout' => sub {
my $self = shift;
$self->session(expires => 1);
$self->redirect_to('index');
});
}
1;
これは意味があります。
package MyApp::Login;
use Mojo::Base 'Mojolicious::Controller';
sub index {
my $self = shift;
my $user = $self->param('user') || '';
my $pass = $self->param('pass') || '';
return $self->render unless $self->users->check($user, $pass);
$self->session(user => $user);
$self->flash(message => 'Thanks for logging in.');
$self->redirect_to('protected');
}
sub protected {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
}
sub logout {
my $self = shift;
$self->session(expires => 1);
$self->redirect_to('index');
}
1;
package MyApp;
use Mojo::Base 'Mojolicious';
use MyUsers;
sub startup {
my $self = shift;
# ...auth stuff omitted...
my $r = $self->routes;
$r->any('/')->to('login#index')->name('index');
$r->get('/protected')->to('login#protected')->name('protected');
$r->get('/logout')->to('login#logout')->name('logout');
}
1;
私はなぜこれが表示されていない。しかし、それは、このアプリケーションのクラスは、さらにアクションがコントローラクラスにリファクタリングすることができ、およびアプリケーション・クラス自体は、ルーティング情報に減らすことができると言うことになりますコントローラのredirect_to()でアクション間をリダイレクトするために、別のファイルでルーティング情報を調べる必要があるため、ルートとアクションが混在している "ハイブリッド"バージョンより優れています。 URLを変更するには、1つではなく2つの異なるファイルで行う必要があります。この:(私はまだ)「保護」の名前は(何をするかわからないが)
単語を持っていsub protected {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
}
$r->get('/protected')->to('login#protected')->name('protected');
2つの異なるファイルに4回を「保護」:
$r->get('/protected' => sub {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
});
は変身します。
ところで、私はWeb開発については完全な初心者です。
私は、redirect_to( 'foo')がパス '/ foo'の代わりに名前として 'foo'を解釈し、M :: L get/post/any/etc関数が自動的に実行されることを認識しませんでした作成された名前。それは今、感謝します、ありがとう。 – user1481