Hatena::Groupcatalyst

masaki@catalyst RSSフィード

Fork me on GitHub
 | 

2006-12-27

Catalyst::Plugin::BuildURIをURIに日本語が存在するときにも使いたい

| 03:27 | Catalyst::Plugin::BuildURIをURIに日本語が存在するときにも使いたい - masaki@catalyst を含むブックマーク はてなブックマーク - Catalyst::Plugin::BuildURIをURIに日本語が存在するときにも使いたい - masaki@catalyst Catalyst::Plugin::BuildURIをURIに日本語が存在するときにも使いたい - masaki@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');

ZIGOROuZIGOROu2006/12/28 23:12対応しまーす^^;

ikasam_aikasam_a2006/12/28 23:28お,ありがとうございます.BuildURIは中々気に入っていて,最近Catalystアプリを書くときにはデフォルトで使わせて頂いています.

トラックバック - http://catalyst.g.hatena.ne.jp/ikasam_a/20061227
 |