Yii框架form表單用法實(shí)例
本文實(shí)例講述了Yii框架form表單用法。分享給大家供大家參考。具體方法如下:
使用表單
在 Yii 中處理表單時(shí),通常需要以下步驟:
1. 創(chuàng)建用于表現(xiàn)所要收集數(shù)據(jù)字段的模型類。
2. 創(chuàng)建一個(gè)控制器動(dòng)作,響應(yīng)表單提交。
3. 在視圖腳本中創(chuàng)建與控制器動(dòng)作相關(guān)的表單。
一、創(chuàng)建模型
在編寫(xiě)表單所需的 HTML 代碼之前,我們應(yīng)該先確定來(lái)自最終用戶輸入的數(shù)據(jù)的類型,以及這些數(shù)據(jù)應(yīng)符合什么樣的規(guī)則。模型類可用于記錄這些信息。正如模型章節(jié)所定義的,模型是保存用戶輸入和驗(yàn)證這些輸入的中心位置。
取決于使用用戶所輸入數(shù)據(jù)的方式,我們可以創(chuàng)建兩種類型的模型。如果用戶輸入被收集、使用然后丟棄,我們應(yīng)該創(chuàng)建一個(gè)表單模型; 如果用戶的輸入被收集后要保存到數(shù)據(jù)庫(kù),我們應(yīng)使用一個(gè)Active Record。兩種類型的模型共享同樣的基類 CModel ,它定義了表單所需的通用接口。
1、定義模型類
例如創(chuàng)建為一個(gè)表單模型:
{
public $username;
public $password;
public $rememberMe=false;
}
LoginForm 中定義了三個(gè)屬性: $username, $password 和 $rememberMe。他們用于保存用戶輸入的用戶名和密碼,還有用戶是否想記住他的登錄的選項(xiàng)。由于 $rememberMe 有一個(gè)默認(rèn)的值 false,相應(yīng)的選項(xiàng)在初始化顯示在登錄表單中時(shí)將是未勾選狀態(tài)。
我們將這些成員變量稱為特性(attributes)而不是屬性(properties),以區(qū)別于普通的屬性(properties)。特性(attribute)是一個(gè)主要用于存儲(chǔ)來(lái)自用戶輸入或數(shù)據(jù)庫(kù)數(shù)據(jù)的屬性(propertiy)。
2、聲明驗(yàn)證規(guī)則
一旦用戶提交了他的輸入,模型被填充,我們就需要在使用前確保用戶的輸入是有效的。這是通過(guò)將用戶的輸入和一系列規(guī)則執(zhí)行驗(yàn)證實(shí)現(xiàn)的。我們?cè)?rules() 方法中指定這些驗(yàn)證規(guī)則,此方法應(yīng)返回一個(gè)規(guī)則配置數(shù)組。
{
public $username;
public $password;
public $rememberMe=false;
private $_identity;
public function rules()
{
return array(
array('username, password', 'required'), //username 和 password 為必填項(xiàng)
array('rememberMe', 'boolean'), //rememberMe 應(yīng)該是一個(gè)布爾值
array('password', 'authenticate'), //password 應(yīng)被驗(yàn)證(authenticated)
);
}
public function authenticate($attribute,$params)
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','錯(cuò)誤的用戶名或密碼。');
}
}
rules() 返回的每個(gè)規(guī)則必須是以下格式:
其中的參數(shù):
AttributeList(特性列表)是需要通過(guò)此規(guī)則驗(yàn)證的特性列表字符串,每個(gè)特性名字由逗號(hào)分隔;
Validator(驗(yàn)證器) 指定要執(zhí)行驗(yàn)證的種類;
on 參數(shù)是可選的,它指定此規(guī)則應(yīng)被應(yīng)用到的場(chǎng)景列表;
附加選項(xiàng) 是一個(gè)名值對(duì)數(shù)組,用于初始化相應(yīng)驗(yàn)證器的屬性值。
二、form表單更新數(shù)據(jù)時(shí)候選值問(wèn)題
category表和post表是多對(duì)多,有個(gè)中間表relationships,分別記著category_id和post_id
Post.php model中 有關(guān)系
Category.php model中有方法:
return CHtml::listData(self::model()->findAll(), 'id', 'name');
}
比如現(xiàn)在我要更新一條數(shù)據(jù),這條數(shù)據(jù)的欄目有兩個(gè),假設(shè)該文章id是21,是屬于兩個(gè)欄目,那么在relationship表中的數(shù)據(jù)就應(yīng)該是
1 21 1
2 21 2
其中id是流水,該文章的category是1和2. 該欄目的數(shù)據(jù)我通過(guò)建立Relationship.php的AR能夠獲取,
_from中表單我是這么寫(xiě)的:
<?php echo $form->labelEx($model,'cid'); ?>
<?php echo $form->checkBoxList($model,'cid',
Category::getAllCategory(),array(
'style'=>'display:inline;',
'separator'=>"<br />n",
'template'=>'{input}{label}',
'labelOptions'=>array('style'=>'display:inline')));
?>
<?php echo $form->error($model,'cid'); ?>
</div>
問(wèn)題是我在_form 中不知道要腫么將數(shù)據(jù)填進(jìn)去?就是我在更新數(shù)據(jù)的時(shí)候,欄目應(yīng)該選中才對(duì)。
對(duì)于view層數(shù)據(jù)的解耦,拋開(kāi)checkBoxList,用dropDownList來(lái)說(shuō)舉個(gè)例子:
1=>分類1,2=>分類2,表現(xiàn)層(view)中可能是''=>請(qǐng)選擇,1=>分類1,2=>分類2。通過(guò)此,你想到了什么?
關(guān)于Behavior是這樣的,Behavior只是一種解決方案,稍后再說(shuō)。目前你要明白的是,你如果要為Model提供一個(gè)屬性(像cid[]),需要考慮哪幾點(diǎn)?(提示:要與CActiveRecord接地氣)
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
laravel結(jié)合vue添加權(quán)限的實(shí)現(xiàn)示例
本文將結(jié)合實(shí)例代碼,介紹laravel結(jié)合vue添加權(quán)限,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07CentOS 7.2 下編譯安裝PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法詳解(mini版
這篇文章主要介紹了CentOS 7.2 mini版本下編譯安裝PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09一張表搞清楚php is_null、empty、isset的區(qū)別
這篇文章主要介紹了一張表搞清楚php is_null、empty、isset的區(qū)別,isset 判斷變量是否已存在,empty 判斷變量是否為空或?yàn)?,is_null 判斷變量是否為NULL,需要的朋友可以參考下2015-07-07WordPress過(guò)濾垃圾評(píng)論的幾種主要方法小結(jié)
不僅是中文的,WordPress用戶經(jīng)常還會(huì)受到英文日文等各種國(guó)外垃圾評(píng)論的騷擾,這里我們就來(lái)看一下WordPress過(guò)濾垃圾評(píng)論的幾種主要方法小結(jié):2016-07-07析構(gòu)函數(shù)與php的垃圾回收機(jī)制詳解
在PHP中,沒(méi)有任何變量指向這個(gè)對(duì)象時(shí),這個(gè)對(duì)象就成為垃圾。PHP會(huì)將其在內(nèi)存中銷毀。這是PHP的GC(Garbage Collector)垃圾處理機(jī)制,防止內(nèi)存溢出2013-10-10Laravel5.5 視圖 - 創(chuàng)建視圖和數(shù)據(jù)傳遞示例
今天小編就為大家分享一篇Laravel5.5 視圖 - 創(chuàng)建視圖和數(shù)據(jù)傳遞示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10