Mojolicious路线创建

时间:2019-01-02 10:43:06

标签: perl mojolicious

我想基于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()调用中使用它。

0 个答案:

没有答案