Я хочу направить запрос в динамически созданный контроллер, основанный на заполнителе в URL. Чтобы проиллюстрировать это, я хочу сделать что-то вроде следующего:
use Mojo::Base 'Mojolicious';
sub startup {
my $r = $self->routes;
my $route = $r->get('/:customer/boxs/:id');
[ somehow, extract the :customer holder into a variable $customer, then ]
$route->(
controller => "$customer::boxs',
action => 'get_list',
);
}
Я пытался, но не могу найти пути к этому, и я не уверен, возможно ли это?
Некоторый указатель ценится. Благодарю.
ОБНОВИТЬ
Я могу проанализировать URL-адрес запроса с помощью обработчика before_depatch и выяснить, какой класс клиента следует использовать, прежде чем произойдет маршрутизация.
Предполагая, что URL-адрес запроса / kwikemart / liquor / 22, я выясняю имя клиента (kwikemart) следующим образом:
sub startup {
my $self = shift;
$self->hook( before_dispatch => sub {
my $c= shift;
$c->req->url->path =~ m#^/(\w+)/.+#;
$customer = $1;
}
$r = $self->routes;
$r->get('....')->to(....);
...
...
}
Вопрос в том, где хранить этого $ клиента, чтобы я мог использовать его для указания правильного маршрута позже? Я до сих пор не совсем понимаю, как работает Mojo :: Base Class. Не уверен, как правильно создать пользовательский атрибут, который является локальным для каждого запроса, поэтому его можно использовать в вызове $ r-> to ().