さてCakePHP。前回までのあらすじはこちら。 » CakePHP修行! アーカイブ | i d e a * i d e a で、前回まででログイン画面をざっくり動作させようとしたのですが、なんだかエラーが出てうまくいきませんでした。 うっかり「CakePHP修行終了~」エントリーを書こうと思いましたがw、青い人がフォローしてくれたので続けたいと思います。ありがとう!青い人。すごい勉強になっている! ちなみにつっこんでもらったエントリーはこちら。 » Re: CakePHP修行 #011 無限リダイレクトに気をつけろ : akiyan.com ポイントはいくつか。 「ブラウザの不正リダイレクトは無限ループが原因」ってことが多いらしいことを知りました。 ControllerのbeforeFilter()の挙動について学んだ。 解決方法についてアイディアをもらった。 うむ。かなりのぽかミスにもかかわらず「よくあるミス」となぐさめてくれた青い人に感謝感激。教え上手ですな。さすが開発チームのリーダー。 ではでは気を取り直していってみます。 ■ 今回の作業計画 いろいろ考えた結果、今回は以下をやってみます。 前回のエラーに関しては単純にbeforeFilterを使わずに、ログインが必要なアクションについてその都度checkSession()を呼ぶようにしたいと思います。 現在Sessionに保存されている情報は’User’で、User情報全部なのですが、IDだけでいいだろ、ということで’my_id’をログイン後にセッションに保存するようにします。そうしないとユーザー情報が変わった時に全部セッション書き換えないといけないので。 users_controllerにhome()を足します。home()は自分のホーム画面を表示するためのものです。 http://www.codexcode.com/にアクセスすると自分のホーム画面に行くように設定してみます。 ヘッダーとフッターのテンプレートを変更して画面をかっこよくします。 さてがしがしやりましょう。 ■ セッション関連、home()など まずはController。beforeFilter()を削除し、ログインの挙動を変更し、home()を追加します。 /app/controllers/users_controller.phpは以下のように。 function home () { $this->checkSession(); $this->set(‘me’, $this->User->findById($this->Session->read(‘my_id’))); } function login() { $this->set(‘error’, false); if (!empty($this->data)) { $someone = $this->User->findByEmail($this->data[‘User’][’email’]); if(!empty($someone[‘User’][‘pwd’]) && $someone[‘User’][‘pwd’] == $this->data[‘User’][‘pwd’]) { $this->Session->write(‘my_id’, $someone[‘User’][‘id’]); $this->redirect(‘/users/home/’); } else { $this->set(‘error’, true); } } } セッションの変更に合わせて/app/app_controller.phpも変更。 <?php class AppController extends Controller { function checkSession() { // If the session info hasn’t been set… if (!$this->Session->check(‘my_id’)) { // Force the user to login $this->redirect(‘/users/login’); exit(); } } } viewも追加しないといけませんね。/app/views/users/home.thtmlも作ります。とりあえずデータをDumpするだけで。 <?php var_dump ($me); ここまでを一気に完了。テストしてみます。 まずは /users/home/ にアクセス。 ↑ ちゃんとログイン画面がでました! ↑ 無事ログインすると自分の情報が! さて、次はURLの挙動とテンプレートについて作業してみます。長くなるのでエントリーわけよっと。