Создание веселого маршрута - PullRequest
0 голосов
/ 02 января 2019

Я хочу направить запрос в динамически созданный контроллер, основанный на заполнителе в 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 ().

...