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; ?>&nbsp;
		<?php echo CHtml::link($user->username, array('user2/view', 'id'=>$user->id)); ?>&nbsp;
		<?php echo $user->password; ?>&nbsp;
		<?php echo $user->email; ?>&nbsp;
		<?php echo CHtml::link('update', array('user2/update', 'id'=>$user->id)); ?>&nbsp;
		<?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ページが表示されること

http://localhost/yiiprac1/index.php?r=user2