パルカワ2

最近はFlutterをやっています

Malts::Web::Router::Simple 1

俺得フレームワークMaltsの話。

package MyApp::Web::Dispatcher;
use strict;
use warnings;
use Malts::Web::Router::Simple;

mount '/user/:user_id' => 'User';

get '/' => sub { # /
    my ($self, $c) = @_;
    $c->render(200, 'root/index.tx');
};

1;

package MyApp::Web::Dispatcher::User;
use strict;
use warnings;
use Malts::Web::Router::Simple;

get '/' => sub { # /user/1 or /user/1/
    my ($self, $c) = @_;
    my $user_id = $c->args->{user_id};
    $c->render(200, 'user/index.tx');
};

get '/mount' => sub { # /user/1/mount
    my ($self, $c) = @_;
    my $user_id = $c->args->{user_id};
    $c->render(200, 'user/mount.tx');
};

1;

mountというのを追加したので、こういう事が出来るようになりました。
mountとか一々書くのめんどくさいぜ!ファック!という人向けに、auto_mount;というのを作りました。

package MyApp::Web::Dispatcher::Post;
...;

package MyApp::Web::Dispatcher::ChiChin::Puipui;
...;

package MyApp::Web::Dispatcher;
use strict;
use warnings;
use Malts::Web::Router::Simple;

mount '/user/:user_id' => 'User';
auto_mount;
# mount '/post' => 'Post';
# mount '/chichin/puipui' => 'Chichin::Puipui';

1;

既にmountしてあるものは無視します。
ただ、どの順番でmountに登録されるのか指定出来ないし、すごい分かりにくそうになるパターンありそうだな〜と思います。

package MyApp::Web::Dispatcher::User;
...;

package MyApp::Web::Dispatcher::User::Post;
...;

package MyApp::Web::Dispatcher;
...;

mount '/user/:user_id' => 'User';
auto_mount; # mount '/user/post' => 'User::Post';

1;

この場合だと/user/postにアクセスしても、/user/:user_idに振り分けられる。
明示的にやったほうがいいような気がします。

あと今まではMyApp::Web::Dispatcher::Userとかにあるやつも自動でMyApp::Web::Dispatcherにあるとみなしてたんだけど、それはやめました。
Malts::Web::Router::Simpleは、あと2つくらいやりたい事があるので、それは分けて説明する。よてい。

(もうシンプルじゃない…)