- 2007-06-28 (Thu) 3:27
- CakePHP関連
さてCakePHP。前回までのあらすじはこちら。
» CakePHP修行! アーカイブ | i d e a * i d e a
今回はログイン画面を作っていきます。参考にするのはここらへん。
■ /app/views/users/login.thtml
まずはログイン画面を作ります。チュートリアルを参考にしながら作りこんでいきます。
前回のモックアップで作った画面のHTMLはこんな感じなのでここにコードを入れこんでいきます(テーブルタグかよー、とか言わないw)。
<form> <div id="sys_msg">email and password do not match!</div> <table border="0" cellspacing="2" cellpadding="2"> <tr><td width="40%" align="right">email</td><td><input type="text" size="30" name="email" value="" /></td></tr> <tr><td width="40%" align="right">password</td><td><input type="password" size="20" name="password" value="" /></td></tr> <tr><td width="40%"> </td><td><input type="checkbox" name="save" value="" /> save my info?</td></tr> <tr><td width="40%"> </td><td><input type="submit" value="Let me in!" /></td></tr> <tr><td width="40%"> </td><td><a href="">forgot your password?</a></td></tr> </table> </form>
チュートリアルによれば「$html->url」とか「$html->input」とかいれていけばいいらしい。あまり考えずにやってみます。
<form action="<?php echo $html->url('/users/login'); ?>" method="post">
<?if ($error): ?>
<div id="sys_msg">email and password do not match!</div>
<? endif; ?>
<table border="0" cellspacing="2" cellpadding="2">
<tr><td width="40%" align="right">email</td><td><?php echo $html->input('User/email', array('size' => 30)); ?></td></tr>
<tr><td width="40%" align="right">password</td><td><?php echo $html->input('User/pwd', array('size' => 20)); ?></td></tr>
<tr><td width="40%"> </td><td><input type="checkbox" name="save" value="" /> save my info?</td></tr>
<tr><td width="40%"> </td><td><?php echo $html->submit('Let me in!'); ?></td></tr>
<tr><td width="40%"> </td><td><a href="">forgot your password?</a></td></tr>
</table>
</form>
うーん、と。「save my info?」のところをどう処理したらいいかわかりません。checkboxの表現もわからなければ、データとしてどう持つべきかもよくわかりません。そういうときは「ザ・後回し!」。とりあえずチェックボックスだけ表示させておいて機能はあとで作るようにします。
■ /app/controllers/users_controller.php
次にControllerでlogin()を作ります。チュートリアルをコピーして適宜変えてみます。長くなるのでコード内のコメントは削除。
<?php
class UsersController extends AppController
{
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('User', $someone['User']);
$this->redirect('/');
}
else
{
$this->set('error', true);
}
}
}
function logout()
{
$this->Session->delete('User');
$this->redirect('/');
}
}
?>
えーと、これはこれでいいのかな。リダイレクト先をどうすべきかがいまいちわからん。あとpwdはまんまで比較しているのでいまいちですね。これはあとでやることにしましょう。
■ /app/app_controller.php
さて次はセッションをチェックして、ログインしていなかったらログイン画面に飛ばすロジックを作成(かな?)。
<?php
class AppController extends Controller
{
function checkSession()
{
if (!$this->Session->check('User'))
{
$this->redirect('/users/login');
exit();
}
}
}
?>
■ /app/controllers/users_controllers.php
そんでもって、User関係のすべてのアクションの前にこのセッションチェックをしてみましょう。
<?php
class UsersController extends AppController
{
function beforeFilter()
{
$this->checkSession();
}
}
■ テスト!
さて、ここまで出来たらテストです!おもむろに http://www.codexcode.com/users/ にアクセス!

↑ キターーーーーーーーーーーーーーーーーーーー・・・じゃねー、キテネェ・・・。
しかし http://www.codexcode.com/users/login にはリダイレクトされていますね。/app/views/users/login.thtml があればアクセスできんじゃねぇの?と思うのですが・・・。
しかもエラーメッセージがリダイレクト関係の変なメッセージなのが気になります。
うーん。眠いから寝る。
- Newer: ログイン画面をデバッグする(CakePHP修行 #012)
- Older: モックアップ画面をいろいろ作る(CakePHP修行 #010)
Comments:1
- akiyan.com 07-06-29 (Fri) 2:14
-
Re: CakePHP修行 #011 無限リダイレクトに気をつけろ
ログイン画面を作っていくぞ、と(CakePHP修行 #011) | i d e a * i d e aで、ブラウザのエラー画面が出たところで作業が終了しま…
Trackbacks:1
- Trackback URL for this entry
- http://www.ideaxidea.com/archives/2007/06/cakephp_011.html/trackback
- Listed below are links to weblogs that reference
- ログイン画面を作っていくぞ、と(CakePHP修行 #011) from IDEA*IDEA ~ 百式管理人のライフハックブログ
- trackback from ElectronicBrain is eating BreakFast 09-04-08 (Wed) 12:14
-
「CakePHP修行」を追う #5
さて、上記の画像はCakePHPの非公式の壁紙らしいです。こちらの記事で紹介されています。→ CakePHP のおいしい食べ方: CakePHPの壁紙
なお、この記事の過去記事はこちらのカテゴ…


























