俺でもできるもんな

独立系SI企業から完全異業種のベンチャー企業に転職、社内のITインフラを整えるべく颯爽と登場した自称天才プログラマー俺のハートフルブログ

CodeIgniter URIパスとセグメントをごにょる

こんなバグがあった

画面概要

  • 検索フォーム付きの一覧画面がある。
  • 仮にこのページのURLを「/seach/list」とする。

  • このページのページネーション用パラメータは /seach/list/2 /seach/list/3 というふうに後ろにつく。

  • 検索用パラメータはセッションに保存している。

  • 検索フォームにはこのようなリセットボタンがある。

<button type="button" onclick="location.href='http://localhost/seach/list'">reset</button>

viewのソースは

<button type="button" onclick="location.href='<?= base_url() . uri_string() ?>'">reset</button>

こんな感じ。

  • GET/POST両パラメータが何もない時に検索用セッションをクリアする。

何が起きたか

概要を見て「ん?」て思う人もいるでしょう、 2ページ目以降でリセットボタンが効かない! 効かない!効かない!何回クリックしても効かない!テストしろよ!

改善策

ページネーション用パラメータ消せばいいじゃん

まあそうなんですが、どうやって消そうか。 パスの最後の「/」より前が数値だったらそこ消そうか、is_numeric()使ったらいける。 いや、なんかそれはダサいぞ。

URIのセグメントというものにたどり着く。(これがかっこいいかは不明) 僕が説明するよりHPを見た方がわかりやすいと思う。 軽量PHPフレームワーク ‘CodeIgniter’ 徹底ガイド!:CI_URI

こうなった

<button type="button" onclick="location.href='<?= base_url() . ($this->uri->segment(3) ? str_replace($this->uri->slash_segment(3, 'leading'), '', uri_string()) : uri_string()) ?>'">reset</button>

第3セグメントが存在する場合はuri_string()から「/ + 第3セグメント」を消す。

ええ。それだけです。

上記ソース見にくい人用にgist

Codeigniter URIパスとセグメントをごにょる ref: http://qiita.com …