catalyst | |
![]()
Catalyst::Plugin::BuildURIで$argsに日本語が入った場合に上手くいかなかったのと,あとexample.com/myapp/なんて配置の場合に上手くいかなかったので,0.0.2にパッチ書いてみた.
--- BuildURI.pm~ 2006-12-27 03:15:02.000000000 +0900 +++ BuildURI.pm 2006-12-27 03:18:25.000000000 +0900 @@ -6,6 +6,7 @@ our $VERSION = '0.0.2'; use URI; +use URI::Escape qw(uri_escape_utf8); use Catalyst::Exception; sub build_uri { @@ -17,6 +18,7 @@ unless ($action); $args = [$args] if(defined $args && !ref $args); + $args = [ map { uri_escape_utf8($_) } @$args ]; ### for Regex, LocalRegex my $path = $c->dispatcher->uri_for_action( $action, $args ); @@ -26,9 +28,16 @@ $path .= ('/' . join( "/", @$args )) if (@$args); } - my $uri = ($base_uri) ? URI->new($base_uri) : $c->request->uri->clone; + my $uri = ($base_uri) ? URI->new($base_uri) : $c->request->base->clone; - $uri->path($path); + if ( my $base_path = $uri->path ) { + $base_path .= $path; + $base_path =~ s!/+!/!g; + $uri->path($base_path); + } + else { + $uri->path($path); + } $uri->port(undef) if ( $uri->port && $uri->port == $uri->default_port ); if ( my $ref_type = ref $query ) {
直接動作に関係ないけど,CPANPLUSでUnparsableになるので,0.0.xみたいなversion stringを使うのなら version.pm使った方がいいかもしれないと思った.
use version; our $VERSION = qv('0.0.2');
ZIGOROu2006/12/28 23:12対応しまーす^^;
ikasam_a2006/12/28 23:28お,ありがとうございます.BuildURIは中々気に入っていて,最近Catalystアプリを書くときにはデフォルトで使わせて頂いています.