Mojolicious :: Lite를 "잘 조직 된"cpan 업로드 응용 프로그램으로 성장시키는 방법을 알려주는 Mojolicious::Guides::Growing 섹션을 읽었습니다. 먼저 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을 변경하면 하나가 아닌 두 개의 다른 파일에서 URL을 변경해야합니다. 이 : (아직) "보호"이름이 (무엇을 잘 모르겠어요하지만)
단어를 가지고sub protected {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
}
$r->get('/protected')->to('login#protected')->name('protected');
두 개의 서로 다른 파일에 4 번 "보호"
$r->get('/protected' => sub {
my $self = shift;
return $self->redirect_to('index') unless $self->session('user');
});
가로 변신 .
나는 웹 개발에 관해서는 완전히 초보자입니다.
OOhhhh, redirect_to ('foo')가 경로 '/ foo'대신 이름으로 'foo'를 해석하고 M :: L get/post/any/etc 함수를 자동으로 인식하지 못했습니다. 생성 된 이름. 고마워. 고마워. – user1481