Catalyst::View::MobileJpFilterを使ってリダイレクト時にもguid=ONを付ける方法

Catalyst::View::MobileJpFilterでのHTML::MobileJP::Filter::DoCoMoGUIDなんですが、本文のURLに対してはguid=ONを付けてくれますが、リダイレクトするときには付いてくれません。

なのでとりあえず自分でつけましょう。

とはいえ

sub hoge : Local {
	my ($self, $c ) = @_;

	my $url = URI->new('/hoge');
	$url->query_form({ guid => 'ON' }) if $c->req->mobile_agent->is_docomo;

	$c->res->redirect( $url );
}

とか毎回書くのも超メンドウなので、何処かで自動的に入れてあげるのがベストです。

とりあえず僕のケースではMyApp::View::MobileJpFilterでやることにしました。

package MyApp::View::MobileJpFilter;
use strict;
use warnings;
use base 'Catalyst::View::MobileJpFilter';

use YAML;

__PACKAGE__->config(YAML::Load <<'...'
---
filters:
  - module: DoCoMoGUID
...
);

sub process {
    my $self = shift;
    my $c    = shift;
    $self->next::method($c,@_);
    
    return 1 unless ($c->res->status || 0) =~ /^\s*3\d\d\s*$/;
    return 1 unless $c->req->mobile_agent->is_docomo;
    
    my $location = $c->res->location or return 1;
    
    my $uri = eval { URI->new($location) } || $location;
    $uri->query_param( guid => 'ON' , $uri->query_param );
    
    $c->res->location($uri);
    
    return 1;
}

こんな感じっすねー。Viewでこの辺いじるのはどうなのかなーとか思いつつDoCoMoGUIDとの繋がりからとりあえずここにしてみました。

まーでもコントローラーのendとかでやる方がいいのかもしれない。そのへん保留。