Это работает, если поместить ваш контроллер в класс и сказать Mojolicious, где найти этот контроллер.По умолчанию приложение Lite не выполняет поиск контроллеров ни в каких пространствах имен маршрутов.
use Mojolicious::Lite;
push app->routes->namespaces->@*, 'Route::Controller';
(get '/x')->to('Route#bar');
app->start;
package Route::Controller::Route;
use Mojo::Base 'Mojolicious::Controller';
sub bar {
my $self = shift;
$self->render(json => { hello => 'simone' });
}
1;
При вызове типа perl test.pl get /x
я вижу следующие выходные данные отладки:
[Wed May 23 12:01:14 2018] [debug] GET "/x"
[Wed May 23 12:01:14 2018] [debug] Routing to controller "Route::Controller::Route" and action "bar"
[Wed May 23 12:01:14 2018] [debug] 200 OK (0.000467s, 2141.328/s)
{"hello":"simone"}
Если выхорошо, если не использовать удобный синтаксис Route#bar
, вы также можете указать маршрут как:
get '/x' => { controller => 'Route', action => 'bar' };
(присвоение хэш-значения get
аналогично вызову ->to()
на новом маршруте с этимиаргументы.)