yiiを使ってみる7
YiiFrameworkを使ってみる1h/dayシリーズ7回目。当面の目標はCRUDを自前で実装すること。今回はupdate。ここまでくれば迷わず書ける。
Updateを実装する
user2 indexビュー
updateへのリンクを追加
<h1>user2/index</h1> <p> <?php echo CHtml::link('create', array('user2/create')); ?> </p> <ol> <?php foreach($users as $user) : ?> <li> <?php echo $user->id; ?> <?php echo CHtml::link($user->username, array('user2/view', 'id'=>$user->id)); ?> <?php echo $user->password; ?> <?php echo $user->email; ?> <?php echo CHtml::link('update', array('user2/update', 'id'=>$user->id)); ?> <?php echo CHtml::link('delete', array('user2/delete', 'id'=>$user->id)); ?> </li> <?php endforeach; ?> </ol>
user2 updateアクション
コントローラーにupdateアクションを追加する。
public function actionUpdate() { $id = CHttpRequest::getParam('id'); $userModel = User::model()->findByPk($id); if (!$userModel) $this->redirect(array('user2/index')); $user = new User2Form(); $user->id = $userModel->id; $user->username = $userModel->username; $user->password = $userModel->password; $user->email = $userModel->email; if ($_POST['User2Form']) { $user->setAttributes($_POST['User2Form']); if ($user->validate()) { $userModel->username = $user->username; $userModel->password = $user->password; $userModel->email = $user->email; if($userModel->save()) { $this->redirect(array('user2/index')); } } } $this->render('Update',array( 'user'=>$user, )); }
user2フォームモデル
idプロパティを追加する。
<?php class User2Form extends CFormModel { public $id; public $username; public $password; public $email; public function rules() { return array( array('username, password', 'required'), array('email', 'email'), ); } }
user2 updateビュー
<h1>user2/update</h1> <?php echo CHtml::beginForm(); ?> <?php echo CHtml::errorSummary($user); ?> <?php echo CHtml::activeLabel($user,'id'); ?> <?php echo $user->id; ?> <br> <?php echo CHtml::activeLabel($user,'username'); ?> <?php echo CHtml::activeTextField($user,'username'); ?> <br> <?php echo CHtml::activeLabel($user,'password'); ?> <?php echo CHtml::activePasswordField($user,'password'); ?> <br> <?php echo CHtml::activeLabel($user,'email'); ?> <?php echo CHtml::activeTextField($user,'email'); ?> <br> <?php echo CHtml::submitButton('update'); ?> <?php echo CHtml::endForm(); ?> <p> <?php echo CHtml::link('index', array('user2/index')); ?> </p>
確認
- indexページからupdateページへのリンク
- updateページでエラーになる値を入力→updateボタンをクリックし、バリデーション結果が表示されること
- updateページでエラーにならない値を入力→Userテーブルに保存され、indexページが表示されること