Вам нужно искать маршруты через ваш объект Mojolicious::Routes внутри вашего app
. Имя для lookup
автоматически генерируется Mojolicious::Lite из части пути URI, поэтому /process_name
имеет имя process_name
.
Вы получаете обратно Mojolicious::Routes::Route, который метод render
, и вы можете передать туда свои параметры.
use Mojolicious::Lite;
get '/foundname' => sub {
my $c = shift;
my $name_on = $c->req->query_params->param('name');
if( $name_on ) {
my $process_name = app->routes->lookup('process_name')->render( { searched => $name_on } );
$c->render( text => $process_name );
}
};
get '/process_name' => sub {
my $c = shift;
my $got_name = $c->req->query_params->param('searched');
$c->render( text => $got_name );
};
app->start;
Когда вы сворачиваете это, вы возвращаете параметр в качестве ответа.
$ curl localhost:3000/foundname?name=foo
/process_name
Однако, вероятно, это не правильный подход. Если вы хотите реализовать бизнес-логику, вы не должны использовать для этого внутренние или скрытые маршруты. Помните, что ваше приложение по-прежнему представляет собой Perl. Вы можете написать sub
и назвать это.
use Mojolicious::Lite;
get '/foundname' => sub {
my $c = shift;
my $name_on = $c->req->query_params->param('name');
if( $name_on ) {
my $got_name = process_name( $name_on );
$c->render( text => $got_name );
}
};
sub process_name {
my ( $got_name ) = @_;
# do stuff with $got_name
return uc $got_name;
};
app->start;
Это выведет
$ curl localhost:3000/foundname?name=foo
FOO
Это более переносимый подход, так как вы можете легко протестировать эти функции. Если вы хотите иметь $c
, вы должны передать его. У вас также есть ключевое слово app
, доступное в любом sub
, который вы определяете.
person
simbabque
schedule
23.02.2017
/process_name
. Это правильно? - person simbabque   schedule 23.02.2017