Home > PHP > CakePHP

CakePHP Archive

Twitter フォローokな人を探す「follow ok」を作りました

この記事の所要時間: 31

Twitterでフォローokな人を探すサービスを作りました。

follow-ok

誰をフォローすれば?

ある時、ふとTwitterでフォローする人を増やしたいなと思い立ちました。そこでふと湧いた疑問が2点。

1. フォローする人をどうやって探す?
まず誰をフォローしようかと。フォローする人リストはあちこちのサイトにあるので、そこからフォローするのが早いです。(ちなみにPHPな人ならこんなリストがあります。)
ただこういったリストに入っている人は有名人な分野が偏っていたりで、多様な人をフォローしたいというニーズには合いません。また有名人系はそもそもフォローしてたりするので、さらに増やすとなると他で探す必要があります。
フォローするためにユーザ一覧が欲しいな
2. この人フォローしてもok?
何とかフォローしたい人は見つけたとして、いざフォローしようとした際、フォロー/フォロワーが20人以下のユーザだと何となく気が引けませんか?
もちろんTwitterではprotectedな人以外はフォロー自由なので、特に気にする必要は無いのですが、フォローする人のフォロー/フォロワーが少ないと「身内だけで楽しんでいるのかな?」といらぬ気を遣って、何だかフォローするのをためらってしまいます。
フォローしてもokなことを表明してくれるとフォローしやすいな

follow ok

という流れで作ったのが 「follow ok」 です。

「follow ok」では、二つの機能があります。

1. ユーザを探す

フォローしたいユーザを探します。このサービスではユーザが自ら登録を行っているので、安心してフォローすることができます。

1-1. キーワードを入力して検索

follow_ok_textbox

登録ユーザは自分のキーワード(タグ)を登録してるので、キーワードを指定することにより、該当するユーザを検索することができます。

1-2. キーワード(タグ)をクリックして検索

follow_ok_user

ユーザ表示の下部にはそのユーザが登録したキーワード(タグ)が表示されています。これをクリックすると同じキーワードを登録しているユーザが表示されます。

2. 自分を登録する

自分自身もフォローokなら「follow ok」に登録しましょう!

登録はTwitterから「@follow_ok」につぶやくだけでokです。

follow_ok_twit

つぶやいて数分経つと 「follow ok」 に表示されます。

キーワード(タグ)を登録する

つぶやく時はキーワード(タグ)を指定しましょう。登録したいキーワードを[]で囲んで下さい。上の画面例なら[cakephp][iphone][大阪]の4つがキーワードとして登録されます。

@follow_ok」につぶやけば何度でもキーワードを登録することができます。キーワードは毎回上書きされるので、最後につぶやいたものが登録されます。

下のアイコンをクリックするとそのまま@follow_okにつぶやけますよ:-D

follow_ok_register

follow okからのフォローも

Twitterでリリースをつぶやいて、100人超の方に登録頂けました(ありがとうございます!)。Twitterだと反応が直ぐに貰えるので、とても嬉しいです。中には「follow okからフォローしてもらえたよ」と言って頂ける方もいらっしゃいました。

今後も何か気になることがあれば「@shin1x1」までつぶやいて下さいm(_ _)m

フォローする相手を探す方も、フォロワーを募りたい方も、活用して頂ければ嬉しいです。

よろしくお願いします!

CakePHP Cafe LiveTalkが無事に終了しました。

この記事の所要時間: 144

ジュンク堂池袋本店さんにて行われた「CakePHP Cafe LiveTalk」が無事に終了しました。

cakephp_cafe_live_talk

当日は花火大会があり、またPHPな人はガンダムBBQ、と色々とバッティングしていたのですが、暑い中お集まり頂いた参加者の皆さんには感謝感謝です。ありがとうございました。

トークセッションが始まるまでは、いつも勉強会とは勝手が違うので妙な感じがしましたが、前で話し出すと、岸田さんの絶妙な司会のおかげで、それほど緊張もせずにわりと素な感じで話すことができました。

自身の反省点としては、今回のように複数人で前で話すという機会がこれまで無かったので、話題に上手く絡んでいくのが結構難しいな、と感じました。

ようは、

話したい内容があってムズムズしてくる。

人の話を遮るのもアレだし、これが終わったら話そうかな。

あ、話題終わっちゃった。

という感じです:-D

もし動画が公開されたら、マイクを口まで持っていったもののタイミングを逸してモゴモゴしている様が多分写ってます。。。

考えてみると勉強会での発表だって一人でやらないといけないルールは無いので、複数人で発表するのも全然アリですね。これは今後試してみたいです。

一つ裏話を言うと、実はコアな人が多いだろうと思って、CakePHP2/Cake3について簡単にまとめた資料を用意していたのですが、時間も押し気味でしたので、お蔵入りとなりました。

# まあ、これは気が向けばblogにでも挙げます;-D

当日は、新幹線移動して、15:00頃からCakePHPカンファレンスの話とか喫茶店でして、トークライブして、という流れだったので、懇親会では梅酒一杯で体力が尽きていました。。。

最後に、今回のような機会を作って頂いた、ジュンク堂池袋本店さん、マイコミさん、ありがとうございました。

そして何より参加して頂いた皆さん本当にありがとうございました。

勉強会もわりとこういったゆるい雰囲気でやっていますので、お気軽にご参加下さい:-D

CakePHPのトークイベントは明日開催ですよ

この記事の所要時間: 19

さて待ちに待ったCakePHPのトークイベント「CakePHP Cafe LiveTalk」が明日(7/25)に開催されます。

「CakePHP Cafe LiveTalk」

安藤祐介×岸田健一郎×新原雅司

  • 会場:ジュンク堂書店 池袋本店(TEL:03-5956-6111) 4F喫茶にて。
  • 日時:7/25(土)19:00~
  • 入場料:1,000円(ドリンクつき)
  • 受付:1階 案内カウンターにて。電話予約承ります。

CakePHP1.2ガイドブック出版記念のイベントですが、本の話だけでなく、CakeFestの話や日頃開発している上での印象など色々なネタを仕込んでいます:-D

また先のCakeFestで発表されたCakePHP2/Cake3を少し触ってみたので、速報的にお話できればと思っています。CakePHPの今後の展望を知る上でも興味深い内容となっています。

また、書店でのトークイベントということで日頃勉強会に参加できない方も気軽に参加頂けますよ。

まだ若干、席があるようなので、お時間が取れる方は是非ご参加下さいませ!

お申込はジュンク堂池袋本店さんの受付カウンターもしくはTEL(03-5956-6111)でお願いします。

では明日「CakePHP Cafe LiveTalk」でお会いしましょう。

CakePHP core.phpの設定をbootstrap.phpに書く

この記事の所要時間: 136

CakePHPでDebug Levelなどの設定を変更する際は、core.phpを修正するのが一般的です。インストール直後にSecurity.saltを変更するのはお馴染みですね。

そんなcore.phpですが、実はこの設定はbootstrap.phpに記述してもokです。例えば以下のようにDebug Levelをbootstrap.phpに記述するとDEBUG=0として動作します。

[app/config/bootstrap.php]

Configure::write('debug', 0);

coreはそのままで、差分をbootstrapに

この方法で何が嬉しいかと言うと、デフォルトの設定をcore.phpに残したまま、変更すべきものだけをbootstrap.phpに書くということができるという点です。

変更したものがはっきり分かりますし、元の設定がどうだったかをすぐに確認することができます。

[app/config/bootstrap.php]

// デフォルトから変更する値だけ記述
Configure::write('debug', 2);
Configure::write('Session.cookie', 'sid');
Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9');

設定書くならbootstrapで

最近は、core.phpからの変更点のほか、アプリケーションで利用する定数なんかもbootstrap.phpにガシガシ書いていっているので、設定を見る、触るなら、まずここという方針が固まってきました。

bootstrap.phpは意外と使っていない人も多いようなので、活用して見て下さい。

7/25にCakePHP Cafe LiveTalkを行います。

この記事の所要時間: 118

CakePHP1.2ガイドブック刊行記念イベントとしてトークイベントを行います。

「CakePHP Cafe LiveTalk」

安藤祐介×岸田健一郎×新原雅司

  • 会場:ジュンク堂書店 池袋本店(TEL:03-5956-6111) 4F喫茶にて。
  • 日時:7/25(土)19:00~
  • 入場料:1,000円(ドリンクつき)
  • 受付:1階 案内カウンターにて。電話予約承ります。

安藤さん岸田さん、新原の3人で、CakeFestやら、CakePHP本やら、CakePHPやらについてお話する予定です。

CakeFest開催後のイベントとなるので、現地に行かれる安藤さんのお話はフレッシュでとても楽しみです。もちろん岸田さんも私も負けじとCakePHP話を繰り広げるつもりですよ。

普段の勉強会とはまた違った雰囲気のイベントとなるので、日頃聞けないような話が飛び出すかも:-D

参加される方はジュンク堂池袋本店1F案内カウンターにてお申し込み下さい。また遠方の方などお申し込みに行けない方はTELにて予約できるそうですので、ご確認下さいませ。

[2009/06/16] まだ受け付け開始していないようです(id:cakephperさん情報ありがとうございました!)。受付開始後にご案内しますので、お待ち下さい。

[2009/06/19] 受け付けを開始しました。ふるってご参加下さい:-D

イベント後は有志による懇親会なども企画しているので、夏の夜にみなさんで盛り上がりましょう!

CakePHP1.2ガイドブックが出ます

この記事の所要時間: 10

一部でお待たせしていましたCakePHPガイドブックの1.2版が今月下旬に発刊されます。

表紙が青になっているのがポイントですね:-D

この本では、単に1.2対応としただけでなく、章によっては全面書き直しや新機能の加筆といった作業を行ったので、ガイドブックからは50P増になりました。

1.2では多くの機能が盛り込まれており、この1冊で全てを網羅することは難しいのですが、ガイドブックにあった「導入」「実践」「応用」の流れはそのままに、必要な情報を取捨選択して1冊にまとめました。

CakePHP初心者の方から中級・上級の方まで参考になる本となりましたので、是非手に取って頂ければ嬉しいです。

前作のCakePHPガイドブックは私自身初めての書籍ということで思い入れの強い本でした。その続編である本書を書く際はこの1年半を振り返る意味でも有意義なものでした。

一緒に執筆した堂園さん、安藤さんには、、、、、、、、

と、言った話をするトークイベントを7/25に池袋ジュンク堂さんにて行います。こちらも楽しいイベントになりそうなので、ご参加下さいませ-。

イベントについてはこちらで。

CakePHP 目で見るフックメソッド

この記事の所要時間: 146

第2回CakePHP関西勉強会でやったデモをこちらでも。

CakePHPには色々なフックメソッドがあるのですが、それらがどのタイミングで呼ばれるかを一覧できるようにデモを行いました。懇親会やアンケートでも良かったよ、と意見を頂いたので、簡単に画面のキャプチャを並べます。

1. Controllerのフックメソッド

Controllerのフックメソッドを並べています。index()はアクションメソッドなので、ここで表示されているフックメソッドは3つです。

ソース

<?php
class DemoController extends AppController {
  public $uses = array();

  public function index() {
  }
}
?>

フックメソッドの並び

2. Componentのフックメソッド

Controllerの$componentsを設定して、ControllerとComponentのフックメソッドを表示しています。赤色になっているのがComponentです。ControllerとComponentのフックメソッドが絡み合って実行されているのが分かりますね。

ソース

<?php
class DemoController extends AppController {
  public $uses = array();
  public $components = array('Demo'); //<---追加

  public function index() {
  }
}
?>

フックメソッドの並び

2-1. Componentを複数定義

Controllerの$componentsでComponentを複数設定すると各々のフックメソッドが順に実行されます。また実行される順は$componentsで記述した順序となります。

ソース

<?php
class DemoController extends AppController {
  public $uses = array();
  public $components = array('Hoge','Demo'); //<---追加

  public function index() {
  }
}
?>

フックメソッドの並び

3. Helperのフックメソッド

さらにControllerの$helpersを設定して、ControllerとComponentとHelperのフックメソッドを表示しています。Helperのフックメソッドは青色です。Helperはビューで利用されるので、後半に集中しています。

ソース

<?php
class DemoController extends AppController {
  public $uses = array();
  public $components = array('Demo');
  public $helpers = array('Demo'); //<---追加

  public function index() {
  }
}
?>

フックメソッドの並び

まとめ

個々のメソッドは知っていても、あらめたてこうして俯瞰して見るとなかなか面白いです。全体の流れが見通せるので、どこに何を書くべきか迷ったときは参考にしてみて下さい。

第2回CakePHP関西勉強会も盛り上がりました&発表資料

この記事の所要時間: 345

第2回CakePHP関西勉強会が終了しました。


photo by zatsu

前回からは半年程経っているのですが、関西もまだまだアツいです。主催ということで、司会もやりつつ発表もしつつとなったのですが、開始からopening、自己紹介、自分の発表と初めの1時間ほどは喋りっぱなしになって、ちょいバテました:-D

他の勉強会でも主催の方はこういう状況になりがちなので、次回以降は順番等を練りたいですね。

今回の発表ではフックメソッドについて話しました。内容はフックメソッドの紹介と呼び出し順を見える化したデモなのですが、特に最後に触れた認証系のフックメソッドの呼び出し順を気にかけて貰えれば嬉しいです。さらに良い使い方があれば是非教えて下さい。

発表資料をアップしておきます。

フックメソッドを極める

View more presentations or Upload your own.

以下、いつものようにつらつらとメモ書きです。

1. フックメソッドを極める

  • shin1x1
  • まあ早い話がslywalkerさんの前節ですよ(冗談):-D
  • フックメソッドは便利なので、オススメです
  • 色々とアドバイスを頂いた(嬉)ので次に生かします!

2. 究極のコントローラを目指す

  • slywalkerさん
  • リファクタリングの様子を発表=>これは分かりやすい
  • リファクタリングでコードが消えていくエフェクトが面白い!
  • ちょうど社内でもコードの見直しをしているのでタイムリーでした。
  • AppControllerにアクションメソッドはさすがにやり過ぎかも:-)

3. RubyOnRailsからCakePHPへ

  • yabumaruさん
  • Rails to Cakeの道はかなり興味津々
  • RubyとPHPの状況から
  • さすがどちらも知っている人の話は参考になる
  • Rails苦行w
  • やっぱり手軽に使えるのがCakeの利点
  • Railsの application.rb が application_controller.rb
  • candycaneでもRailsコードを見ているので勉強になるシーンが多々
  • まさかのCakePHP稼働案件公開!
  • この事例だけで発表ネタいけますよ:-D

LT1. CakePHPでこんなの作ってみました

  • msngさん
  • 元先生!
  • Cakeを使う経緯から、Cakeで開発したサービスの紹介を
  • パパッとサービスが作れるのもCakeの特徴ですね
  • 軽妙でLTらしいトークが楽しかったです:-D

LT2. CakePHPでPDFを出力してみる

  • keisonさん
  • PDF出力をコードを交えて
  • 私は素直にPDFlib使っちゃってます:-D
  • 外部ライブラリの使い方はPDFに限らずに参考になりますね

LT3. plugin の名前と URL がキモいのを何とかする

  • pm11opさん
  • 名前の由来がw
  • PluginのURLのキモさは感じていたので共感:-D
  • 端々に他の人の発表を紹介する心配りがにくいですね
  • ネタ的にはもう少し掘り下げて、発表枠でやっても面白そうです!
  • Core弄りは黒魔術
  • Piza!Piza!

懇親会

  • 関西勉強会ではお馴染みのオシャレ韓国料理屋さん
  • 遅い時間からお世話になりましたm(_ _)m
  • ちょろちょろうろうろしてました
  • 人は意外なとこで繋がっているとか
  • 実装思想のアツい話とか
  • うなぎ饅頭のフリ忘れていたとか
  • キャパが少なくてゴメンナサイとか
  • Pieceとか
  • フレームワークとの付き合い方とか
  • rhacoとか
  • Perlの勉強会もお邪魔します!
  • 色々な方とお話できました
  • とにかく盛り上がったので良かったです:-D
  • ああー今日は最後の麺が無かった

次もやりましょー

実はここ数日、個人的に色々とあってなかなか大変な状況だったのですが、無事に勉強会が開催できて良かったです。

次回については詳細は未確定ですが、もう少し大きめの会場でやりたいと考えているので、ぜひ皆さん発表の準備をしておいて下さい:-D

東京から急遽参加して頂いたすずきさんのおかげで無事にust配信を行うことができました。ありがとうございました!

参加された皆さん、発表者の皆さん、運営のみんな、本当にお疲れ様でした&ありがとうございました。次回も盛り上げていきましょー!!

CakePHP フレームワークのソースをapp/で置き換える

この記事の所要時間: 135

こないだのCakePHP勉強会でやったネタですが、需要がありそうなんで書きます。

CakePHPは1.2Finalになって色々と改良が成されて拡張性も増えたのですが、良くなってきた分、さらに色々とやりたくなるのが人の常です。そこでフレームワークのソースをどうしても書き換えたい時にcake/を触るのではなく、せめてapp/でフレームワークソースを置き換えましょう、という話です。

[目標] ConnectionManagerをapp/に置く

デモではDispatcherの置き換えをやったのですが、cake bake diaryさんのエントリのように需要があるかもなので、ConnectionManagerをapp/に置いてフレームワークに読ませようと思います。

1. ConnectionManagerのソースをapp/以下にコピー

ConnectionManagerを一から書いても良いのですが、それも大変なので、まずフレームワークのConnectionManagerのソースをapp/以下にコピーします。

ConnectionManagerはcake/libs/model/connection_manager.phpになるので、それに倣ってapp/modles/connection_manager.phpにコピーします。

$  cp -a cake/libs/model/connection_manager.php app/models/

2. ConnectionManagerのソースを変更する

app/にコピーしたConnectionManagerを変更します。ここでは読み込まれたソースが分かりやすいように先頭にファイルパスをvar_dump()しておきます。

[app/models/connection_manager.php]

<?php
var_dump(__FILE__); // <---追加
/* SVN FILE: $Id: connection_manager.php 8120 2009-03-19 20:25:10Z gwoo $ */
/**
 * Datasource connection manager
 *
 * Provides an interface for loading and enumerating connections defined in app/config/database.php
 *
 * PHP versions 4 and 5

&#91;/php&#93;
<h3>3. ConnectionManagerをフレームワークに読ませる</h3>
<p>最後にapp/のConnectionManagerをフレームワークに読み込ませます。これにはApp::import()のキャッシュ機能を使います。</p>
<p>方法は簡単で、bootstrap.phpに以下のように書くだけでokです。</p>
<p>[app/config/bootstrap.php]</p>

App::import('Core', 'ConnectionManager', array('file' => '../app/models/connection_manager.php'));

ブラウザからアクセスすると下のように画面上に2.で書いたパスが表示されて、[app/models/connection_manager.php]が読み込まれているのが分かります。

あとはこのソースをガシガシ書き換えていけばokです。

いざという時使えるかも

少しトリッキーな方法ですが、フレームワークのソースを書き換える手段としては覚えておいて損は無いと思います。

ただし、この方法はApp::import()の機能を利用しているので、フレームワークがApp::import()で読まないソース(Objectとか)は残念ながら使えません。あしからず。

CakePHP routes.phpの確認はユニットテストで

この記事の所要時間: 423

第4回CakePHP勉強会@Tokyoでakiyanの男前な発表があったので、今後急増するであろうroutes.phpを極めていく人にオススメな確認方法をご紹介します。

routes.phpの確認にはユニットテストをオススメします。

routes.php設定でありがちなループとして、

  • routes.phpを設定 -> ああ動いた
  • routes.phpに設定追加 -> ああー動かない
  • routes.phpを修正 -> あれ?前動いたところも動かなくなってるorz

というのがあるのですが、せっかくCakePHPにはユニットテスト機構があるのでテストを書いて動作確認をしましょう。

SimpleTestをダウンロードしていない人はダウンロードして、app/vendors/かvendors/に展開しておいて下さい。

routes.phpで設定する目標

Web2.0(最近あんまり聞かないですが。。。)なサイトではありがちなユーザIDを含めるURLを実現します。

URL コントローラー アクション パラメータ
/ TopController index none
/shin1x1 UserController index $params[‘user_id’] = ‘shin1x1’
/shin1x1/edit UserController edit $params[‘user_id’] = ‘shin1x1’
それ以外 NothingController index none

routes.phpを仕様に合わせて設定しておきます。

<?php
  //
  Router::connect('/:user_id/edit', array('controller' => 'user', 'action' => 'edit'));
  Router::connect('/', array('controller' => 'top', 'action' => 'index'));
  Router::connect('/:user_id/*', array('controller' => 'user', 'action' => 'index'));

  // Nothing
  Router::connect('*', array('controller' => 'nothing'));
?>

最後はシステムが取るべきURL以外ならNot Foundを出すように設定しています。これにより想定外のコントローラーやアクションが実行されるのを防ぎます。

テストケースを作る

テストケースは何でも良いですが、とりあえず[app/tests/cases/url_routing.test.php]としておきましょう。スケルトンなソースは以下になります。

当然ながらこれはGREENでとおります。

<?php
App::import('Core', 'Dispatcher');

class UrlRoutingTestCase extends CakeTestCase {
}
?>

テストケースを書く [‘/:user_id/edit’]

まず[URLパターン=’/:user_id/edit’]のテストです。shin1x1がユーザIDとなっています。URLの正引き(URLからコントローラーやアクション、パラメータ等々を決定)はtest_parseParams~()に、URLの逆引き(コントローラーやアクション、パラメータ等々からURLを決定)はtest_url~()に実装しています。

URLの正引きではDispatcher#parseParams()に対象URLを与えて、その戻り値をassertで確認しています。実際の正引き処理はRouterクラスが行うのですが、戻り値の扱いやすさ、分かりやすさを考えてDispatcherを使っています。よりディープなテストをするならRouter::parse()を使った方が良いですね。

↓では[/shin1x1/edit]というURLに対してどのような正引きを行うかとテストしています。

<?php
  public function test_parseParams_user_edit() {
    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/shin1x1/edit');
    $this->assertIdentical('user', $params['controller']);
    $this->assertIdentical('edit', $params['action']);
    $this->assertIdentical('shin1x1', $params['user_id']);
    $this->assertIdentical(array(), $params['pass']);
    $this->assertIdentical(array(), $params['named']);
  }

?>

次は逆引きです。こちらはRouter::url()にパラメータを設定して、URLを求めています。Router::url()はパラメータからURLを生成するシーン(HelperとかController#redirect()とか)の裏で使われているメソッドなので、ここで求められるURLを確認すれば、実際のアプリケーションの挙動が確認できます。

↓では[controller=’user’、action=’edit’, ‘user_id’=shin1x1]というパラメータからどのようなURLが生成されるかをテストしています。

<?php
  public function test_url_user_edit() {
    $url = Router::url(array('controller' => 'user', 'action' => 'edit', 'user_id' => 'shin1x1'));
    $this->assertIdentical('/shin1x1/edit', $url);
  }

?>

テストケースを書く [‘/’]

以下、同様です。正引き、逆引きをテストしています。

<?php
  public function test_parseParams_user_top() {
    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/');
    $this->assertIdentical($params['controller'], 'user');
    $this->assertIdentical($params['action'], 'top');
    $this->assertIdentical(array(), $params['pass']);
    $this->assertIdentical(array(), $params['named']);
  }
  public function test_url_user_top() {
    $url = Router::url(array('controller' => 'user', 'action' => 'top'));
    $this->assertIdentical('/', $url);

    $url = Router::url(array('controller' => 'user', 'action' => 'top', 'user_id' => 'shin1x1'));
    $this->assertIdentical('/user/top/user_id:shin1x1', $url);
  }
?>

テストケースを書く [‘/:user_id/*’]

こちらも同様ですね。正引き、逆引きをテストしています。ここではnamedパラメータやQUERY_STRINGも簡易的にテストに入れています。

<?php
  public function test_parseParams_user_index() {
    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/shin1x1');
    $this->assertIdentical('user', $params['controller']);
    $this->assertIdentical('index', $params['action']);
    $this->assertIdentical('shin1x1', $params['user_id']);
    $this->assertIdentical(array(), $params['pass']);
    $this->assertIdentical(array(), $params['named']);

    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/shin1x1/');
    $this->assertIdentical($params['controller'], 'user');
    $this->assertIdentical($params['action'], 'index');
    $this->assertIdentical('shin1x1', $params['user_id']);
    $this->assertIdentical(array(), $params['pass']);
    $this->assertIdentical(array(), $params['named']);

    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/shin1x1/a');
    $this->assertIdentical($params['controller'], 'user');
    $this->assertIdentical($params['action'], 'index');
    $this->assertIdentical('shin1x1', $params['user_id']);
    $this->assertIdentical(array('a'), $params['pass']);
    $this->assertIdentical(array(), $params['named']);

    // namedパラメータ
    $Dispatcher =& new Dispatcher();
    $params = $Dispatcher->parseParams('/shin1x1/page:1');
    $this->assertIdentical($params['controller'], 'user');
    $this->assertIdentical($params['action'], 'index');
    $this->assertIdentical('shin1x1', $params['user_id']);
    $this->assertIdentical(array(), $params['pass']);
    $this->assertIdentical(array('page' => '1'), $params['named']);
  }
  public function test_url_user_index() {
    $url = Router::url(array('controller' => 'user', 'action' => 'index', 'user_id' => 'shin1x1'));
    $this->assertIdentical('/shin1x1', $url);

    $url = Router::url(array('controller' => 'user', 'action' => 'index', 'user_id' => 'shin1x1', 'page' => 1));
    $this->assertIdentical('/shin1x1/page:1', $url);

    $url = Router::url(array('controller' => 'user', 'action' => 'index', 'user_id' => 'shin1x1', 'page' => 1, '?' => array('mode' => 'hoge')));
    $this->assertIdentical('/shin1x1/page:1?mode=hoge', $url);
  }
?>

ユニットテストで楽々確認

というわけでユニットテストでroutes.phpをテストしてみました。

routes.phpの設定は凝っていくと色々な事ができて楽しいのですが、複雑にしていくとハマリがちです。特に条件が複雑になると意図せぬルーティングにマッチしてしまうことがままあります。

そんな時にテストを書いておけば、手軽に動作が確認できます。また、設定変更等に伴うデグレも簡単に判別することができます。例えば、冒頭にあるroutes.phpの内容も順番を入れ替えるとルーティングが変わるのですが、こういった事もテストを実行すれば、どのような挙動になっているかをすぐに判別がつきます。

URLルーティングのテストは書きやすいですし、書いていくと病みつきになりますよ。来月の自分のためにもバンバンテストを書いておきましょ-。

ホーム > PHP > CakePHP

検索
フィード
メタ情報

Return to page top