TOPシステム開発> 削除確認画面の表示(/delete)
まるごとPerl!
使ってわかるCatalyst

第6回:登録フォームの作成
著者:アドウェイズ  加藤 敦   2006/9/22
前のページ  1  2
削除確認画面の表示(/delete)

   findメソッドを使ってDBIx::Class::ResultSetオブジェクトを取得し、get_columnsメソッドでハッシュを取得しています(リスト21)。
リスト21:削除確認画面の表示
削除確認画面の表示
(画像をクリックすると別ウィンドウに拡大図を表示します)


編集フォームの表示(/edit)

   することは/deleteと一緒なので、forwardしています(リスト22)。違いは、stashのfdatに値を入れるところだけです。こうすることで、自動的にフォームに値が入ります。

リスト22:編集フォームの表示
sub edit : Local {
   my( $self, $c ) = @_;
   $c->stash->{fdat} = $c->forward('delete');
}


登録の実行(/regist_execute)

   modelを使ってURLがすでに存在するかチェックし、存在しなければ、URLの存在確認のためにLWP::Simpleで内容を取得します(リスト23)。内容が取得できなければエラーです。フォームにタイトルが設定されていない場合は、取得したHTMLのtitleをタイトルとし、titleが無い場合は、'no title'という文字列を代わりに入れておきます。後は、modelからcreateメソッドで登録します。登録が終われば最初に戻るので、indexにforwardしています。

リスト23:登録の処理
sub regist_execute : Local{
   my($self, $c) = @_;
   my %data;
   foreach my $k (qw/url title comment/){
      $data{$k} = $c->req->param($k) || '';
   }
   if(my $url = $data{url}){
      if($c->model('DBIC::bookmark')->find({url => $url})){
         $c->stash->{msg} = 'Already exists: ' . $url;
      }elsif(my $content = LWP::Simple::get($url)){
         $c->stash->{msg} = "Success: " . $url;
         unless($data{title}){
            my($title) = $content =~m {<title>([^<]*)</title>}i;
            $data{title} = Jcode::jcode($title)->utf8;
         }
         $data{title} ||= 'no title';
         $c->model('DBIC::bookmark')->create(\%data);
      }else{
         $c->stash->{msg} = 'Error: cannot get contents (' . $url. ')';
      }
   }
   $c->forward('index');
}

前のページ  1  2

株式会社アドウェイズ 加藤 敦
著者プロフィール
株式会社アドウェイズ   加藤 敦
アフィリエイトシステムやモバイルサイトの構築などを経て、現在、技術マネージャーとして新規サービスの設計、システムの標準化などに携わる。個人的にCPANモジュールの開発や、オープンソースのプロジェクトに参加している。


INDEX
第6回:登録フォームの作成
  追加設定とテンプレートの用意
設定の変更