我想基于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',
);
}
我尝试过,但似乎找不到解决办法,并且不确定是否可行? 一些指针表示赞赏。谢谢。
更新我能够使用'before_depatch'钩子解析请求的网址,并确定在路由发生之前应该使用哪种Customer Class。
假设请求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(....);
...
...
}
问题是,将此$ customer存储在哪里,以便以后可以使用它指定正确的路由?我仍然不太了解Mojo :: Base Class的工作方式。不确定如何正确创建自定义属性,该属性对于每个请求都是本地的,因此可以在$ r-> to()调用中使用它。