●編集画面を作ります。
入力画面→確認画面→完了画面の流れで作りたいと思います。
モデルでバリデーションの設定
/app/models/user.php
<?php
class User extends AppModel
{
var $name = 'User';
// 入力チェック
function validates($data = array())
{
$validate_flg = 0;
if (empty($data)) {
$data = $this->data;
}
// 独自のチェックはここから
$name = $data['User']['name'];
$email = $data['User']['email'];
$pwd = $data['User']['pwd'];
$profile = $data['User']['profile'];
// ニックネームチェック
if (empty($name)) {
// 未入力チェック
$this->invalidate('name');
$validate_flg = 1;
} elseif (mb_strlen($name) > 500) {
// 入力文字数チェック
$this->invalidate('name_mojisuu');
$validate_flg = 1;
}
// メールアドレスチェック
if (empty($email)) {
// 未入力チェック
$this->invalidate('email');
$validate_flg = 1;
} elseif (mb_strlen($email) > 500) {
// 入力文字数チェック
$this->invalidate('email_mojisuu');
$validate_flg = 1;
} elseif (!preg_match('/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i', $email)) {
// 正規表現チェック
$this->invalidate('email_pattern');
$validate_flg = 1;
}
// パスワードチェック
if (empty($pwd)) {
// 未入力チェック
$this->invalidate('pwd');
$validate_flg = 1;
} elseif (mb_strlen($pwd) > 10) {
// 入力文字数チェック
$this->invalidate('pwd_mojisuu');
$validate_flg = 1;
}
// プロフィールチェック
if (empty($profile)) {
// 未入力チェック
$this->invalidate('profile');
$validate_flg = 1;
} elseif (mb_strlen($profile) > 500) {
// 入力文字数チェック
$this->invalidate('profile_mojisuu');
$validate_flg = 1;
}
if ($validate_flg == 0) {
return true;
} else {
$this->invalidate('edit');
return false;
}
}
}
コントローラーの記述
/app/controllers/users_comtroller.php
<?php
class UsersController extends AppController
{
var $name = 'Users';
var $uses = array('User'); // Userモデルを使用
var $needAuth = true; // ログイン必須のフラグ
var $helpers = array('Javascript', 'Html', 'Form');
/*
* 編集入力画面
*/
function edit()
{
// ページタイトルの設定
$this->pageTitle = 'WebLocalCommunity「LocalSNS」 編集入力画面';
// セッションから自分の情報を取得
$auth['User'] = $this->Session->read('auth');
// ビューに渡す
$this->set('data', $auth['User']);
$this->data = $auth;
}
/*
* 編集確認画面
*/
function conf()
{
// ページタイトルの設定
$this->pageTitle = 'WebLocalCommunity「LocalSNS」 編集確認画面';
// セッションから自分の情報を取得
$auth['User'] = $this->Session->read('auth');
// ビューに渡す
$this->set('data', $auth['User']);
// 入力データ整形
$this->data['User']['name'] = trim(mb_convert_kana($this->data['User']['name'], 's'));
$this->data['User']['email'] = trim(mb_convert_kana($this->data['User']['email'], 'as'));
$this->data['User']['pwd'] = trim(mb_convert_kana($this->data['User']['pwd'], 'as'));
$this->data['User']['profile'] = trim(mb_convert_kana($this->data['User']['profile'], 's'));
// 入力チェック
if (!$this->User->validates($this->data)) {
// バリデーション不通過時は入力画面呼出
$this->render('edit');
return;
}
// 表示データをビューに渡す
$this->set('value', $this->data['User']);
}
/*
* 編集処理
*/
function regist()
{
// セッションから自分の情報を取得
$auth['User'] = $this->Session->read('auth');
// ビューに渡す
$this->set('data', $auth['User']);
// 入力データ整形
$this->data['User']['name'] = trim(mb_convert_kana($this->data['User']['name'], 's'));
$this->data['User']['email'] = trim(mb_convert_kana($this->data['User']['email'], 'as'));
$this->data['User']['pwd'] = trim(mb_convert_kana($this->data['User']['pwd'], 'as'));
$this->data['User']['profile'] = trim(mb_convert_kana($this->data['User']['profile'], 's'));
// 戻るボタンクリック時
if (!empty($this->params['form']['send_back'])) {
$this->render('edit');
return;
}
// 入力チェック
if (!$this->User->validates($this->data)) {
$this->render('edit');
return;
}
// 登録処理
$data = array();
// [id]を指定すると[update]
$data['id'] = $auth['User']['id'];
$data['name'] = $this->data['User']['name'];
$data['email'] = $this->data['User']['email'];
$data['pwd'] = md5($this->data['User']['pwd']);
$data['profile'] = $this->data['User']['profile'];
if (!$this->User->save($data, false)) {
$this->flash("<font color='red'><b>編集できませんでした</b></font>","/users/edit/");
exit;
}
// リロード防止
$this->redirect("/users/comp/");
exit;
}
/*
* 編集完了ページ
*/
function comp()
{
// ページタイトルの設定
$this->pageTitle = 'WebLocalCommunity「LocalSNS」 編集完了画面';
// セッションから自分の情報を取得
$auth['User'] = $this->Session->read('auth');
// ビューに渡す
$this->set('data', $auth['User']);
// メッセージをビューに渡す
$message = "編集作業完了致しました!";
$message2 = "再度、ログインお願い致します。";
$this->set('message', $message);
$this->set('message2', $message2);
}
}
1)入力画面を作ります(ビュー)
/app/views/users/edit.thtml
<div id="body">
<h2><?php echo $html->link(h($data['name']), '/users/home/'); ?></h2>
<div id="contents">
<div id="menu">
<ul>
<li><?php echo $html->link('ホーム', '/users/home/'); ?></li>
<li><?php echo $html->link('日記一覧', '/users/diary/'); ?></li>
<li><?php echo $html->link('友達一覧', '/users/friends/'); ?></li>
<li class="on"><?php echo $html->link('編集', '/users/edit/'); ?></li>
<li><?php echo $html->link('ログアウト', '/users/logout/'); ?></li>
</ul>
</div>
<div style="clear:both; border-bottom:1px #ffb366 solid;margin-bottom:10px;"></div>
<div id="edit_data">
<h3>編集</h3>
<form action="<?php echo $html->url('/users/conf/'); ?>" method="post">
<table>
<tr>
<th><?php echo $form->labelTag('User/name', 'ニックネーム');?></th>
<td>
<?php echo $html->input('User/name', array('size' => '50', 'style' => 'color:#3E3E3E'));?><font color="red" size="2px"> (※必須項目)</font>
<?php echo $html->tagErrorMsg('User/name', '<span class="error">ニックネームを入力してください</span>');?>
<?php echo $html->tagErrorMsg('User/name_mojisuu', '<span class="error">ニックネームは500文字以内で入力してください</span>');?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/email', 'メールアドレス');?></th>
<td>
<?php echo $html->input('User/email', array('size' => '50', 'style' => 'color:#3E3E3E'));?><font color="red" size="2px"> (※必須項目)</font>
<?php echo $html->tagErrorMsg('User/email', '<span class="error">メールアドレスを入力してください</span>');?>
<?php echo $html->tagErrorMsg('User/email_mojisuu', '<span class="error">メールアドレスは500文字以内で入力してください</span>');?>
<?php echo $html->tagErrorMsg('User/email_pattern', '<span class="error">メールアドレスの入力が正しくありません</span>');?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/pwd', 'パスワード');?></th>
<td>
<?php echo $html->password('User/pwd', array('size' => '50', 'style' => 'color:#3E3E3E'));?><font color="red" size="2px"> (※必須項目)</font>
<?php echo $html->tagErrorMsg('User/pwd', '<span class="error">パスワードを入力してください</span>');?>
<?php echo $html->tagErrorMsg('User/pwd_mojisuu', '<span class="error">パスワードは10文字以内で入力してください</span>');?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/profile', 'プロフィール');?><br /><font color="red" size="2px"> (※必須項目)</font></th>
<td>
<?php echo $html->textarea('User/profile', array('cols' => '50', 'rows' => '4', 'style' => 'color:#3E3E3E'));?>
<?php echo $html->tagErrorMsg('User/profile', '<span class="error">プロフィールを入力してください</span>');?>
<?php echo $html->tagErrorMsg('User/profile_mojisuu', '<span class="error">プロフィールは500文字以内で入力してください</span>');?>
</td>
</tr>
</table>
<div style="margin-top:2px;margin-left:120px;margin-bottom:10px;">
<?php echo $html->submit(' 確認画面へ進む ');?>
<input name="reset" type="reset" value=" リセット ">
</div>
</div>
</div>
</div>
▼入力画面はこんな感じ。

2)確認画面を作ります(ビュー)
/app/views/users/conf.thtml
<div id="body">
<h2><?php echo $html->link(h($data['name']), '/users/home/'); ?></h2>
<div id="contents">
<div id="menu">
<ul>
<li><?php echo $html->link('ホーム', '/users/home/'); ?></li>
<li><?php echo $html->link('日記一覧', '/users/diary/'); ?></li>
<li><?php echo $html->link('友達一覧', '/users/friends/'); ?></li>
<li class="on"><?php echo $html->link('編集', '/users/edit/'); ?></li>
<li><?php echo $html->link('ログアウト', '/users/logout/'); ?></li>
</ul>
</div>
<div style="clear:both; border-bottom:1px #ffb366 solid;margin-bottom:10px;"></div>
<div id="edit_data">
<h3>編集「確認画面」</h3>
<form action="<?php echo $html->url('/users/regist/'); ?>" method="post">
<table>
<tr>
<th><?php echo $form->labelTag('User/name', 'ニックネーム');?></th>
<td>
<?php echo (empty($value['name'])) ? ' ' : h($value['name']); ?>
<?php echo $html->hidden('User/name', array('value' => $value['name'])); ?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/email', 'メールアドレス');?></th>
<td>
<?php echo (empty($value['email'])) ? ' ' : h($value['email']); ?>
<?php echo $html->hidden('User/email', array('value' => $value['email'])); ?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/pwd', 'パスワード');?></th>
<td>
<?php echo (empty($value['pwd'])) ? ' ' : h($value['pwd']); ?>
<?php echo $html->hidden('User/pwd', array('value' => $value['pwd'])); ?>
</td>
</tr>
<tr>
<th><?php echo $form->labelTag('User/profile', 'プロフィール');?></th>
<td>
<?php echo (empty($value['profile'])) ? ' ' : nl2br(h($value['profile'])); ?>
<?php echo $html->hidden('User/profile', array('value' => $value['profile'])); ?>
</td>
</tr>
</table>
<div style="margin-top:2px;margin-left:120px;margin-bottom:10px;">
<?php echo $html->submit(" 編集する ", array("name" => "send_submit")); ?>
<?php echo $html->submit(" 戻 る ", array("name" => "send_back")); ?>
</div>
</div>
</div>
</div>
▼確認画面。

※改行を反映させるには「nl2br()」で囲みます。
3)完了画面を作ります(ビュー)
/app/views/users/comp.thtml
<div id="body">
<h2><?php echo $html->link(h($data['name']), '/users/home/'); ?></h2>
<div id="contents">
<div id="menu">
<ul>
<li><?php echo $html->link('ホーム', '/users/home/'); ?></li>
<li><?php echo $html->link('日記一覧', '/users/diary/'); ?></li>
<li><?php echo $html->link('友達一覧', '/users/friends/'); ?></li>
<li class="on"><?php echo $html->link('編集', '/users/edit/'); ?></li>
<li><?php echo $html->link('ログアウト', '/users/logout/'); ?></li>
</ul>
</div>
<div style="clear:both; border-bottom:1px #ffb366 solid;margin-bottom:10px;"></div>
<div id="edit_data">
<h3>編集「完了画面」</h3>
<h1><?php echo $message; ?></h1>
<p style="margin-left:20px;"><?php echo $html->link($message2, '/users/login/'); ?></p>
</div>
</div>
</div>
▼完了画面。

これで、ログインし直すと

編集されています。
画像のアップロードは後々。。。
難しそうだなぁ・・・
▼次の記事
[CakePHP]画像のアップロード機能を作る(#004)
▼前回の記事
[CakePHP]ホーム画面を作る(#002)
この投稿への コメント/トラックバック はまだありません...
この投稿にはモデレーション待ちのフィードバックが 1 件あります....