一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Yii框架form表單用法實例

Yii框架form表單用法實例

2020-08-20 12:03PHP教程網 PHP教程

這篇文章主要介紹了Yii框架form表單用法,實例分析了Yii中form表單的實現方法與相關技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了Yii框架form表單用法。分享給大家供大家參考。具體方法如下:

使用表單

在 Yii 中處理表單時,通常需要以下步驟:

1. 創建用于表現所要收集數據字段的模型類。
2. 創建一個控制器動作,響應表單提交。
3. 在視圖腳本中創建與控制器動作相關的表單。

一、創建模型

在編寫表單所需的 HTML 代碼之前,我們應該先確定來自最終用戶輸入的數據的類型,以及這些數據應符合什么樣的規則。模型類可用于記錄這些信息。正如模型章節所定義的,模型是保存用戶輸入和驗證這些輸入的中心位置。

取決于使用用戶所輸入數據的方式,我們可以創建兩種類型的模型。如果用戶輸入被收集、使用然后丟棄,我們應該創建一個表單模型; 如果用戶的輸入被收集后要保存到數據庫,我們應使用一個Active Record。兩種類型的模型共享同樣的基類 CModel ,它定義了表單所需的通用接口。

1、定義模型類

例如創建為一個表單模型:

復制代碼 代碼如下:
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;
}


LoginForm 中定義了三個屬性: $username, $password 和 $rememberMe。他們用于保存用戶輸入的用戶名和密碼,還有用戶是否想記住他的登錄的選項。由于 $rememberMe 有一個默認的值 false,相應的選項在初始化顯示在登錄表單中時將是未勾選狀態。

 

我們將這些成員變量稱為特性(attributes)而不是屬性(properties),以區別于普通的屬性(properties)。特性(attribute)是一個主要用于存儲來自用戶輸入或數據庫數據的屬性(propertiy)。

2、聲明驗證規則

一旦用戶提交了他的輸入,模型被填充,我們就需要在使用前確保用戶的輸入是有效的。這是通過將用戶的輸入和一系列規則執行驗證實現的。我們在 rules() 方法中指定這些驗證規則,此方法應返回一個規則配置數組。

復制代碼 代碼如下:
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe=false;
private $_identity;
public function rules()
{
return array(
array('username, password', 'required'), //username 和 password 為必填項
array('rememberMe', 'boolean'), //rememberMe 應該是一個布爾值
array('password', 'authenticate'), //password 應被驗證(authenticated)
);
}
public function authenticate($attribute,$params)
{
$this->_identity=new UserIdentity($this->username,$this->password);
if(!$this->_identity->authenticate())
$this->addError('password','錯誤的用戶名或密碼。');
}
}


rules() 返回的每個規則必須是以下格式:

復制代碼 代碼如下:
array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加選項)


其中的參數:

 

AttributeList(特性列表)是需要通過此規則驗證的特性列表字符串,每個特性名字由逗號分隔;
Validator(驗證器) 指定要執行驗證的種類;
on 參數是可選的,它指定此規則應被應用到的場景列表;
附加選項 是一個名值對數組,用于初始化相應驗證器的屬性值。

二、form表單更新數據時候選值問題

category表和post表是多對多,有個中間表relationships,分別記著category_id和post_id
Post.php model中 有關系

復制代碼 代碼如下:
'cids'=>array(self::HAS_MANY,'Relationships','post_id'),

 

Category.php model中有方法:

復制代碼 代碼如下:
static public function getAllCategory(){
  return CHtml::listData(self::model()->findAll(), 'id', 'name');
}


比如現在我要更新一條數據,這條數據的欄目有兩個,假設該文章id是21,是屬于兩個欄目,那么在relationship表中的數據就應該是

復制代碼 代碼如下:
id post_id category_id
1    21          1
2    21          2


其中id是流水,該文章的category是1和2. 該欄目的數據我通過建立Relationship.php的AR能夠獲取,
_from中表單我是這么寫的:

復制代碼 代碼如下:
<div class='row'>
  <?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>


問題是我在_form 中不知道要腫么將數據填進去?就是我在更新數據的時候,欄目應該選中才對。

 

對于view層數據的解耦,拋開checkBoxList,用dropDownList來說舉個例子:

1=>分類1,2=>分類2,表現層(view)中可能是''=>請選擇,1=>分類1,2=>分類2。通過此,你想到了什么?
關于Behavior是這樣的,Behavior只是一種解決方案,稍后再說。目前你要明白的是,你如果要為Model提供一個屬性(像cid[]),需要考慮哪幾點?(提示:要與CActiveRecord接地氣)

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天堂网在线网站成人午夜网站 | 国产在线极品 | 青草影院在线观看 | 我和黑色丝袜班主任 | 丝袜老师好湿好紧我要进去了 | 国产亚洲精品视频中文字幕 | 亚洲色图亚洲色图 | 韩国www | 男同互操 | 国内自拍成人网在线视频 | ass亚洲熟妇毛茸茸pics | 性关系视频免费网站在线观看 | 欧美人妖草草xxoo | 国产精品自在线拍 | 狠狠干狠狠插 | 久久国产乱子伦精品免费不卡 | 久久国产精品高清一区二区三区 | 黄瓜污视频 | 欧美日韩一区二区综合在线视频 | 国产精品久久久久毛片真精品 | 男男视频18免费网站 | 千金肉奴隶在线观看 | 欧美美女一级片 | 亚洲精品一区二区久久久久 | 男人在女人下面狂躁 | yy3341殇情影院理论片 | 日本免费在线 | 欧洲肥女大肥臀 | 色花堂中文字幕98堂网址 | 911色_911色sss在线观看 | 国产午夜免费 | 男人操美女逼视频 | 欧美一区二区三区综合色视频 | 日韩a一级欧美一级 | 果冻传媒九一制片厂网站 | 91制片厂制作果冻传媒八夷 | 调教女秘书 | 911色_911色sss在线观看 | 国产精品13p | 草莓永久地域网名入2022 | 丰满在线观看 |