国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah pembangunan bahagian belakang tutorial php PHP開發(fā)框架Yii Framework教程(8) 使用FormModel

PHP開發(fā)框架Yii Framework教程(8) 使用FormModel

Jan 21, 2017 am 09:54 AM

通過前面的學(xué)習(xí),我們了解了Yii Web應(yīng)用的基本組成部分,也會編寫像Hangman猜單詞游戲這樣簡單的應(yīng)用。在第一個(gè)例子 Yii Framework 開發(fā)簡明教程(1) 第一個(gè)應(yīng)用Hello World 我們介紹了Yii Web應(yīng)用采用MVC模型,也說明了本教程目的是通過不 同的視角(主要是通過開發(fā)Windows應(yīng)用C++,C#程序員的角度)幫助Windows桌面應(yīng)用或ASP.Net程序員較快的掌握PHP?Yii Framework應(yīng)用程序框架。

前面我們介紹了通過CHtml創(chuàng)建View(頁面視圖Form),通過CController來處理用戶提交事件 ,和Windows 桌面應(yīng)用或ASP.Net做個(gè)類比, Yii 中視圖View (HTML Form) 類似于WinForm或是Asp.Net 的Page。 控制類 Controller類似Windows桌面應(yīng)用或Asp.Net的事件處理(Code-Behind)類。不同的是Asp.Net和Windows 桌面應(yīng)用可以為UI中各 個(gè)UI組件,比如文本框,按鈕定義Id,然后為不同的UI組件添加事件處理。PHP應(yīng)用或是Yii應(yīng)用沒有對應(yīng)的機(jī)制可以為定義在 HTML Form中的UI組件定義一個(gè)Id,并為UI組件定義事件處理。 然而Yii 框架提供了CFormModel 可以支持類似的功能,簡單的 說,通過CFormModel,可以為HTML Form 中的UI小組件定義變量,并且可以在其控制類Controller中訪問這些變量。每個(gè)Yii View(Form)一般都提供一個(gè)“提交”按鈕(Submit Button),用戶點(diǎn)擊這個(gè)“提交按鈕”觸發(fā)CController對象對應(yīng)的 actionXXX 方法,在actionXXX 方法中可以通過CFormModel來訪問HTML Form的UI組件的值。

前面教程中說過Yii中的模 型(Model)是 CModel 或其子類的實(shí)例。模型用于保持?jǐn)?shù)據(jù)以及與其相關(guān)的業(yè)務(wù)邏輯,

Yii 實(shí)現(xiàn)了兩種類型的模型:表 單模型和 Active Record。二者均繼承于相同的基類 CModel。

表單模型是 CFormModel 的實(shí)例。表單模型用于保持從用戶的輸入獲取的數(shù)據(jù)。 這些數(shù)據(jù)經(jīng)常被獲取,使用,然后丟棄。例如,在一個(gè)登錄頁面中, 我們可以使用表單模型用于表示由最終用戶提供的用戶名和密碼信息。更多詳情,請參考使用表單。本篇介紹CFormModel的用法,

Active Record (AR) 是一種用于通過面向?qū)ο蟮娘L(fēng)格抽象化數(shù)據(jù)庫訪問的設(shè)計(jì)模式。 每個(gè) AR 對象是一個(gè)CActiveRecord 或其子類的實(shí)例。代表數(shù) 據(jù)表中的一行。 行中的字段對應(yīng) AR 對象中的屬性。更多關(guān)于 AR 的細(xì)節(jié)請閱讀?Active Record. 后面介紹數(shù)據(jù)庫使用時(shí)再介紹。

本篇使用一個(gè)簡單的登錄界面來介紹FormModel的用法,本例下載。

1. 定義模型類

下面我們創(chuàng)建了一個(gè) LoginForm (protected/models/LoginForm.php) 模型類用于在一個(gè)登錄頁中收集用戶的輸入。 由于登錄信息只被用于驗(yàn)證用戶,并不需要保存,因此我們將 LoginForm 創(chuàng)建為一個(gè) 表單模型。

class LoginForm extends
CFormModel    
{    
    public $username;    
    public $password;    
    public $rememberMe=false;    
}

2. 聲明驗(yàn)證規(guī)則
一旦用戶提交了他的輸入,模型被填充,我們就需要在使用前確保用戶的輸入是有效的。 這是通過將用戶的輸入和一系列規(guī)則執(zhí)行驗(yàn)證實(shí)現(xiàn)的。我們在 rules() 方法中指定這些驗(yàn)證規(guī)則, 此方法應(yīng)返回一個(gè)規(guī)則配置 數(shù)組。

class LoginForm extends CFormModel    
{    
    public $username;    
    public $password;    
    public $rememberMe=false;    
        
    private $_identity;    
        
    public function rules()    
    {    
        return array(    
            array('username, password', 'required'),    
            array('rememberMe', 'boolean'),    
            array('password', 'authenticate'),    
        );    
    }    
        
    public function authenticate($attribute,$params)    
    {    
        $this->_identity=new UserIdentity($this->username,    
              $this->password);    
        if(!$this->_identity->authenticate())    
            $this->addError('password','錯(cuò)誤的用戶名或密碼。');    
    }    
}

上述代碼指定:username 和 password 為必填項(xiàng), password 應(yīng)被驗(yàn)證(authenticated),rememberMe 應(yīng)該是一 個(gè)布爾值。

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

array('AttributeList', 'Validator',
'on'=>'ScenarioList', ...附加選項(xiàng))

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

有三種方式可在驗(yàn)證規(guī)則中指定 Validator 。第一, Validator 可以是模型類中一個(gè)方法的名字,就像上面示例中的 authenticate 。驗(yàn)證方法必須是下面的結(jié)構(gòu):

/**   
 * @param string 所要驗(yàn)證的特性的名字   
 * @param array 驗(yàn)證規(guī)則中指定的選項(xiàng)   
 */
public function ValidatorName($attribute,$params) { ... }

第二,Validator 可以是一個(gè)驗(yàn)證器類的名字,當(dāng)此規(guī)則被應(yīng)用時(shí), 一個(gè)驗(yàn)證器類的實(shí)例將被創(chuàng)建以執(zhí)行實(shí)際驗(yàn)證。規(guī)則中的附加選項(xiàng)用于初始化實(shí)例的屬性值。 驗(yàn)證器類必須繼 承自 CValidator。

第三,Validator 可以是一個(gè)預(yù)定義的驗(yàn)證器類的別名。在上面的例子中, required 名字是 CRequiredValidator 的別名,它用于確保所驗(yàn)證的特性值不為空。 下面是預(yù)定義的驗(yàn)證器別名的完整列表:

boolean: CBooleanValidator 的別名, 確保特性有一個(gè) CBooleanValidator::trueValue 或CBooleanValidator::falseValue 值。

captcha: CCaptchaValidator 的別名,確保特性值等于 CAPTCHA 中顯示的驗(yàn)證碼。

compare: CCompareValidator 的別 名,確保特性等于另一個(gè)特性或常量。

email: CEmailValidator 的別名,確保特性是一個(gè)有效的Email地址。

default: CDefaultValueValidator 的別名,指定特性的默認(rèn)值。

exist: CExistValidator 的別名,確保特性值可以在指定表的列中 可以找到。

file: CFileValidator 的別名,確保特性含有一個(gè)上傳文件的名字。

filter: CFilterValidator 的別名,通 過一個(gè)過濾器改變此特性。

in: CRangeValidator 的別名,確保數(shù)據(jù)在一個(gè)預(yù)先指定的值的范圍之內(nèi)。

length: CStringValidator 的別名,確保數(shù)據(jù)的長度在一個(gè)指定的范圍之內(nèi)。

match: CRegularExpressionValidator 的別名,確保 數(shù)據(jù)可以匹配一個(gè)正則表達(dá)式。

numerical: CNumberValidator 的別名,確保數(shù)據(jù)是一個(gè)有效的數(shù)字。

required: CRequiredValidator 的別名,確保特性不為空。

type: CTypeValidator 的別名,確保特性是指定的數(shù)據(jù)類型。

unique: CUniqueValidator 的別名,確保數(shù)據(jù)在數(shù)據(jù)表的列中是唯一的。

url: CUrlValidator 的別名,確保數(shù)據(jù)是一個(gè)有效的 URL 。

下面我們列出了幾個(gè)只用這些預(yù)定義驗(yàn)證器的示例:

// 用戶名為必填項(xiàng)    
array('username', 'required'),    
// 用戶名必須在 3 到 12 個(gè)字符之間    
array('username', 'length', 'min'=>3, 'max'=>12),    
// 在注冊場景中,密碼password必須和password2一致。    
array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),    
// 在登錄場景中,密碼必須接受驗(yàn)證。    
array('password', 'authenticate', 'on'=>'login'),

3. 安全的特性賦值

在一個(gè)類的實(shí)例被創(chuàng)建后,我 們通常需要用最終用戶提交的數(shù)據(jù)填充它的特性。 這可以通過如下塊賦值(massive assignment)方式輕松實(shí)現(xiàn):

$model=new LoginForm;
if(isset($_POST['LoginForm']))
$model->attributes=$_POST['LoginForm'];最后的表達(dá)式被稱作 塊賦值(massive assignment) ,它將 $_POST['LoginForm'] 中的每一項(xiàng)復(fù)制到相應(yīng)的模型特性中。這相當(dāng)于如下賦值方法:

foreach($_POST
['LoginForm'] as $name=>$value)    
{    
    if($name 是一個(gè)安全的特性)    
        $model->$name=$value;    
}

檢測特性的安全非常重要,例如,如果我們以為一個(gè)表的主鍵是安全的而暴露了它,那么攻擊者可能就獲得了一個(gè)修 改記錄的主鍵的機(jī)會, 從而篡改未授權(quán)給他的內(nèi)容。

檢測特性安全的策略在版本 1.0 和 1.1 中是不同的,下面我們將 分別講解:

1.1 中的安全特性

在版本 1.1 中,特性如果出現(xiàn)在相應(yīng)場景的一個(gè)驗(yàn)證規(guī)則中,即被認(rèn)為是安全的 。 例如:

array('username, password', 'required', 'on'=>'login, register'),
array('email', 'required', 'on'=>'register'),如上所示, username 和 password 特性在 login 場景中是必 填項(xiàng)。而 username, password 和 email 特性在register 場景中是必填項(xiàng)。 于是,如果我們在 login 場景中執(zhí)行塊賦值,就 只有 username 和 password 會被塊賦值。 因?yàn)橹挥兴鼈兂霈F(xiàn)在 login 的驗(yàn)證規(guī)則中。 另一方面,如果場景是 register , 這三個(gè)特性就都可以被塊賦值。

// 在登錄場景中    
$model=new User('login');    
if(isset($_POST['User']))    
    $model->attributes=$_POST['User'];    
        
// 在注冊場景中    
$model=new User('register');    
if(isset($_POST['User']))    
    $model->attributes=$_POST['User'];

那么為什么我們使用這樣一種策略來檢測特性是否安全呢? 背后的基 本原理就是:如果一個(gè)特性已經(jīng)有了一個(gè)或多個(gè)可檢測有效性的驗(yàn)證規(guī)則,那我們還擔(dān)心什么呢?

請記住,驗(yàn)證規(guī)則是 用于檢查用戶輸入的數(shù)據(jù),而不是檢查我們在代碼中生成的數(shù)據(jù)(例如時(shí)間戳,自動(dòng)產(chǎn)生的主鍵)。 因此,不要 為那些不接受 最終用戶輸入的特性添加驗(yàn)證規(guī)則。

有時(shí)候,我們想聲明一個(gè)特性是安全的,即使我們沒有為它指定任何規(guī)則。 例如, 一篇文章的內(nèi)容可以接受用戶的任何輸入。我們可以使用特殊的 safe 規(guī)則實(shí)現(xiàn)此目的:

array('content', 'safe')

為了完成起見,還有一個(gè)用于聲明一個(gè)屬性為不安全的 unsafe 規(guī)則:

array ('permission', 'unsafe')

unsafe 規(guī)則并不常用,它是我們之前定義的安全特性的一個(gè)例外 。

1.0 中的安全特性

在版本1.0中,決定一個(gè)數(shù)據(jù)項(xiàng)是否是安全的,基于一個(gè)名為 safeAttributes 方法的返回值 和數(shù)據(jù)項(xiàng)被指定的場景. 默認(rèn)的,這個(gè)方法返回所有公共成員變量作為 CFormModel 的安全特性,而它也返回了除了主鍵外, 表中 所有字段名作為 CActiveRecord的安全特性.我們可以根據(jù)場景重寫這個(gè)方法來限制安全特性 .例如, 一個(gè)用戶模型可以包含很 多特性,但是在 login 場景.里,我們只能使用 username 和 password 特性.我們可以按照如下來指定這一限制 :

public function safeAttributes()    
{    
    return array(    
        parent::safeAttributes(),    
        'login' => 'username, password',    
    );    
}safeAttributes 方法更準(zhǔn)確的返回值應(yīng)該是如下結(jié)構(gòu)的 :
array(    
   // these attributes can be massively assigned in any scenario    
   // that is not explicitly specified below    
   'attr1, attr2, ...',    
     *    
   // these attributes can be massively assigned only in scenario 1    
   'scenario1' => 'attr2, attr3, ...',    
     *    
   // these attributes can be massively assigned only in scenario 2    
   'scenario2' => 'attr1, attr3, ...',    
)

如果模型不是場景敏感的(比如,它只在一個(gè)場景中使用,或者所有場景共享了一套同樣的安全特性),返 回值可以是如 下那樣簡單的字符串.

'attr1, attr2, ...'

而那些不安全的數(shù)據(jù)項(xiàng),我們需要使用獨(dú)立的賦值語句來分 配它們到相應(yīng)的特性.如下所示:

$model->permission='admin';    
$model->id=1;4. 觸發(fā)驗(yàn)證

一旦模型被用戶提交的數(shù)據(jù)填充,我們就可以調(diào)用 CModel::validate() 出發(fā) 數(shù)據(jù)驗(yàn)證進(jìn)程。此方法返回一個(gè)指示驗(yàn)證是否成功的值。 對 CActiveRecord 模型來說,驗(yàn)證也可以在我們調(diào)用其 CActiveRecord::save() 方法時(shí)自動(dòng)觸發(fā)。

我們可以使用 scenario 設(shè)置場景屬性,這樣,相應(yīng)場景的驗(yàn)證規(guī)則就會被 應(yīng)用。

驗(yàn)證是基于場景執(zhí)行的。 scenario 屬性指定了模型當(dāng)前用于的場景和當(dāng)前使用的驗(yàn)證規(guī)則集。 例如,在 login 場景中,我們只想驗(yàn)證用戶模型中的 username 和 password 輸入; 而在 register 場景中,我們需要驗(yàn)證更多的輸入,例如 email, address, 等。 下面的例子演示了如何在 register 場景中執(zhí)行驗(yàn)證:

// 在注冊場景中創(chuàng)建一個(gè)  User 模型
。等價(jià)于:    
// $model=new User;    
// $model->scenario='register';    
$model=new User('register');    
        
// 將輸入的值填充到模型    
$model->attributes=$_POST['User'];    
        
// 執(zhí)行驗(yàn)證    
if($model->validate())   // if the inputs are valid    
    ...    
else
    ...規(guī)則關(guān)聯(lián)的場景可以通過規(guī)則中的 on 選項(xiàng)指定。如果 on 選項(xiàng)未設(shè)置,則此規(guī)則會應(yīng)用于所有場景。例如:
public function rules()    
{    
    return array(    
        array('username, password', 'required'),    
        array('password_repeat', 'required', 'on'=>'register'),    
        array('password', 'compare', 'on'=>'register'),    
    );    
}

第一個(gè)規(guī)則將應(yīng)用于所有場景,而第二個(gè)將只會應(yīng)用于 register 場景。

5. 提取驗(yàn)證錯(cuò)誤

驗(yàn)證完成 后,任何可能產(chǎn)生的錯(cuò)誤將被存儲在模型對象中。 我們可以通過調(diào)用 CModel::getErrors()和CModel::getError() 提取這些錯(cuò) 誤信息。 這兩個(gè)方法的不同點(diǎn)在于第一個(gè)方法將返回 所有 模型特性的錯(cuò)誤信息,而第二個(gè)將只返回 第一個(gè) 錯(cuò)誤信息。

6. 特性標(biāo)簽

當(dāng)設(shè)計(jì)表單時(shí),我們通常需要為每個(gè)表單域顯示一個(gè)標(biāo)簽。 標(biāo)簽告訴用戶他應(yīng)該在此表單域中填寫 什么樣的信息。雖然我們可以在視圖中硬編碼一個(gè)標(biāo)簽, 但如果我們在相應(yīng)的模型中指定(標(biāo)簽),則會更加靈活方便。

默認(rèn)情況下 CModel 將簡單的返回特性的名字作為其標(biāo)簽。這可以通過覆蓋 attributeLabels() 方法自定義。 正如在 接下來的小節(jié)中我們將看到的,在模型中指定標(biāo)簽會使我們能夠更快的創(chuàng)建出更強(qiáng)大的表單。

7. 創(chuàng)建動(dòng)作Action方法

創(chuàng)建好LoginForm 表單Model后,我們就可以為它編寫用戶提交后的處理代碼(對應(yīng)到Controller中的某個(gè)Action方法) 。本例使用缺省的SiteController,對應(yīng)的action為actionLogin.

public function actionLogin()    
{    
    $model=new LoginForm;    
    // collect user input data    
    if(isset($_POST['LoginForm']))    
    {    
        $model->attributes=$_POST['LoginForm'];    
        // validate user input and redirect to the previous page if valid    
        if($model->validate() && $model->login()){    
        
            $this->render('index');    
            return;    
        }    
    }    
    // display the login form    
    $this->render('login',array('model'=>$model));    
}

如上所示,我們首先創(chuàng)建了一個(gè) LoginForm 模型示例; 如果請求是一個(gè) POST 請求(意味著這個(gè)登錄表單被提交了 ),我們則使用提交的數(shù)據(jù) $_POST['LoginForm'] 填充 $model ;然后我們驗(yàn)證此輸入,如果驗(yàn)證成功,則顯示index 頁面。 如果驗(yàn)證失敗,或者此動(dòng)作被初次訪問,我們則渲染 login 視圖。
注意的我們修改了SiteController 的缺省 action為login.

/**   
 * @var string sets the default action to be 'login'   
 */
public $defaultAction='login';

因此用戶見到的第一個(gè)頁面為login頁面而非index頁面,只有在用戶輸入正確的用 戶名,本例使用固定的用戶名和密碼,參見UserIdentity類定義,實(shí)際應(yīng)用可以讀取數(shù)據(jù)庫或是LDAP服務(wù)器。

/**   
 * UserIdentity represents the data needed to identity a user.   
 * It contains the authentication method that checks if the provided   
 * data can identity the user.   
 */
class UserIdentity extends CUserIdentity    
{    
    /**   
     * Authenticates a user.   
     * The example implementation makes sure if the username and password   
     * are both 'demo'.   
     * In practical applications, this should be changed to authenticate   
     * against some persistent user identity storage (e.g. database).   
     * @return boolean whether authentication succeeds.   
     */
    public function authenticate()    
    {    
        $users=array(    
            // username => password    
            'demo'=>'demo',    
            'admin'=>'admin',    
        );    
        if(!isset($users[$this->username]))    
            $this->errorCode=self::ERROR_USERNAME_INVALID;    
        else if($users[$this->username]!==$this->password)    
            $this->errorCode=self::ERROR_PASSWORD_INVALID;    
        else
            $this->errorCode=self::ERROR_NONE;    
        return !$this->errorCode;    
    }    
}

讓我們特別留意一下 login 動(dòng)作中出現(xiàn)的下面的 PHP 語句:

$model->attributes=$_POST ['LoginForm'];

正如我們在 安全的特性賦值 中所講的, 這行代碼使用用戶提交的數(shù)據(jù)填充模型。 attributes 屬性由 CModel定義,它接受一個(gè)名值對數(shù)組并將其中的每個(gè)值賦給相應(yīng)的模型特性。 因此如果 $_POST ['LoginForm'] 給了我們這樣的一個(gè)數(shù)組,上面的那段代碼也就等同于下面冗長的這段 (假設(shè)數(shù)組中存在所有所需的特 性):

$model->username=$_POST['LoginForm']['username'];
$model->password=$_POST ['LoginForm']['password'];
$model->rememberMe=$_POST['LoginForm'] ['rememberMe'];

8. 構(gòu)建視圖

編寫 login 視圖是很簡單的,我們以一個(gè) form 標(biāo)記開始,它的 action 屬性應(yīng)該是前面講述的 login 動(dòng)作的URL。 然后我們需要為 LoginForm 類中聲明的屬性插入標(biāo)簽和表單域。最后, 我們插入 一個(gè)可由用戶點(diǎn)擊提交此表單的提交按鈕。所有這些都可以用純HTML代碼完成。

Yii 提供了幾個(gè)助手(helper)類簡化 視圖編寫。例如, 要?jiǎng)?chuàng)建一個(gè)文本輸入域,我們可以調(diào)用 CHtml::textField(); 要?jiǎng)?chuàng)建一個(gè)下拉列表,則調(diào)用 CHtml::dropDownList()。

信息: 你可能想知道使用助手的好處,如果它們所需的代碼量和直接寫純HTML的代碼量相當(dāng)?shù)?話。 答案就是助手可以提供比 HTML 代碼更多的功能。例如, 如下代碼將生成一個(gè)文本輸入域,它可以在用戶修改了其值時(shí)觸 發(fā)表單提交動(dòng)作。

CHtml::textField($name,$value,array('submit'=>''));

不然的話你就 需要寫一大堆 JavaScript 。

下面,我們使用 CHtml 創(chuàng)建一個(gè)登錄表單。我們假設(shè)變量 $model 是 LoginForm 的實(shí)例 。

<center class="form">    
<?php echo CHtml::beginForm(); ?>    
    <?php echo CHtml::errorSummary($model); ?>
    <center class="row">
        <?php echo CHtml::activeLabel($model,&#39;username&#39;); ?>    
        <?php echo CHtml::activeTextField($model,&#39;username&#39;) ?>    
    </center>
    <center class="row">    
        <?php echo CHtml::activeLabel($model,&#39;password&#39;); ?>    
        <?php echo CHtml::activePasswordField($model,&#39;password&#39;) ?>    
    </center>
    <center class="row rememberMe">    
        <?php echo CHtml::activeCheckBox($model,&#39;rememberMe&#39;); ?>    
        <?php echo CHtml::activeLabel($model,&#39;rememberMe&#39;); ?>    
    </center>
    <center class="row submit">    
        <?php echo CHtml::submitButton(&#39;Login&#39;); ?>    
    </center>
<?php echo CHtml::endForm(); ?>    
</center><!-- form -->

上述代碼生成了一個(gè)更加動(dòng)態(tài)的表單,例如, CHtml::activeLabel() 生成一個(gè)與 指定模型的特性相關(guān)的標(biāo)簽。 如果此特性有一個(gè)輸入錯(cuò)誤,此標(biāo)簽的CSS class 將變?yōu)?error,通過 CSS 樣式改變了標(biāo)簽的外 觀。 相似的,CHtml::activeTextField() 為指定模型的特性生成一個(gè)文本輸入域,并會在錯(cuò)誤發(fā)生時(shí)改變它的 CSS class。

如果我們使用由 yiic 腳本生提供的 CSS 樣式文件,生成的表單就會像下面這樣:

573.png

CSS 樣式定義在css目錄下,本例使用的為Yii缺省的樣式。

從版本 1.1.1 開始,提供了一個(gè)新的小物件 CActiveForm 以簡化表單創(chuàng)建。 這個(gè)小物件可同時(shí)提供客戶端及服務(wù)器端無縫的、一致的驗(yàn)證。使用 CActiveForm, 上面的代 碼可重寫為:

<center class="form">    
<?php $form=$this->beginWidget(&#39;CActiveForm&#39;); ?>    
         
    <?php echo $form->errorSummary($model); ?>    
         
    <center class="row">    
        <?php echo $form->label($model,&#39;username&#39;); ?>    
        <?php echo $form->textField($model,&#39;username&#39;) ?>    
    </center>    
         
    <center class="row">    
        <?php echo $form->label($model,&#39;password&#39;); ?>    
        <?php echo $form->passwordField($model,&#39;password&#39;) ?>    
    </center>    
         
    <center class="row rememberMe">    
        <?php echo $form->checkBox($model,&#39;rememberMe&#39;); ?>    
        <?php echo $form->label($model,&#39;rememberMe&#39;); ?>    
    </center>    
         
    <center class="row submit">    
        <?php echo CHtml::submitButton(&#39;Login&#39;); ?>    
    </center>    
         
<?php $this->endWidget(); ?>    
</center><!-- form -->

從下篇開始將逐個(gè)介紹Yii框架支持的UI組件包括CActiveForm的用法。

以上就是PHP開發(fā)框架Yii Framework教程(8) 使用FormModel的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(miracleart.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengenal pasti isu peningkatan Windows menggunakan SetupDiag pada Windows 11/10 Bagaimana untuk mengenal pasti isu peningkatan Windows menggunakan SetupDiag pada Windows 11/10 Apr 17, 2023 am 10:07 AM

Setiap kali PC Windows 11 atau Windows 10 anda mempunyai masalah naik taraf atau kemas kini, anda biasanya akan melihat kod ralat yang menunjukkan sebab sebenar di sebalik kegagalan. Walau bagaimanapun, kadangkala kekeliruan boleh timbul apabila peningkatan atau kemas kini gagal tanpa kod ralat dipaparkan. Dengan kod ralat yang berguna, anda tahu dengan tepat di mana masalahnya supaya anda boleh cuba membetulkannya. Tetapi kerana tiada kod ralat muncul, ia menjadi mencabar untuk mengenal pasti isu dan menyelesaikannya. Ini akan mengambil banyak masa anda untuk mengetahui sebab di sebalik ralat. Dalam kes ini, anda boleh cuba menggunakan alat khusus yang dipanggil SetupDiag yang disediakan oleh Microsoft yang membantu anda mengenal pasti dengan mudah sebab sebenar di sebalik ralat.

Isu Pemasangan Rangka Kerja Microsoft NET Kod Ralat 0x800c0006 Betulkan Isu Pemasangan Rangka Kerja Microsoft NET Kod Ralat 0x800c0006 Betulkan May 05, 2023 pm 04:01 PM

.NET Framework 4 diperlukan oleh pembangun dan pengguna akhir untuk menjalankan versi terkini aplikasi pada Windows. Walau bagaimanapun, semasa memuat turun dan memasang .NET Framework 4, ramai pengguna mengadu bahawa pemasang berhenti di tengah jalan, memaparkan mesej ralat berikut - " .NET Framework 4 belum dipasang kerana Muat turun gagal dengan kod ralat 0x800c0006 ". Jika anda juga mengalaminya semasa memasang .NETFramework4 pada peranti anda maka anda berada di tempat yang betul

SCNotification telah berhenti berfungsi [5 langkah untuk membetulkannya] SCNotification telah berhenti berfungsi [5 langkah untuk membetulkannya] May 17, 2023 pm 09:35 PM

Sebagai pengguna Windows, anda mungkin akan menghadapi ralat SCNotification telah berhenti berfungsi setiap kali anda memulakan komputer anda. SCNotification.exe ialah fail pemberitahuan sistem Microsoft yang ranap setiap kali anda memulakan PC anda kerana ralat kebenaran dan kegagalan rangkaian. Ralat ini juga dikenali dengan nama acaranya yang bermasalah. Jadi anda mungkin tidak melihat ini sebagai SCNotification telah berhenti berfungsi, tetapi sebagai pepijat clr20r3. Dalam artikel ini, kami akan meneroka semua langkah yang anda perlu ambil untuk membetulkan SNotification telah berhenti berfungsi supaya ia tidak mengganggu anda lagi. Apakah itu SNotification.e

Microsoft .NET Framework 4.5.2, 4.6 dan 4.6.1 akan menamatkan sokongan pada April 2022 Microsoft .NET Framework 4.5.2, 4.6 dan 4.6.1 akan menamatkan sokongan pada April 2022 Apr 17, 2023 pm 02:25 PM

Pengguna Microsoft Windows yang telah memasang Microsoft.NET versi 4.5.2, 4.6 atau 4.6.1 mesti memasang versi Microsoft Framework yang lebih baharu jika mereka mahu Microsoft menyokong rangka kerja melalui kemas kini produk masa hadapan. Menurut Microsoft, ketiga-tiga rangka kerja akan menghentikan sokongan pada 26 April 2022. Selepas tarikh sokongan tamat, produk tidak akan menerima "pembetulan keselamatan atau sokongan teknikal." Kebanyakan peranti rumah sentiasa dikemas kini melalui kemas kini Windows. Peranti ini sudah mempunyai versi rangka kerja yang lebih baharu yang dipasang, seperti .NET Framework 4.8. Peranti yang tidak mengemas kini secara automatik boleh

Yii2 vs Phalcon: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi pemaparan grafik? Yii2 vs Phalcon: Rangka kerja manakah yang lebih baik untuk membangunkan aplikasi pemaparan grafik? Jun 19, 2023 am 08:09 AM

Dalam era maklumat semasa, data besar, kecerdasan buatan, pengkomputeran awan dan teknologi lain telah menjadi tumpuan perusahaan utama. Di antara teknologi ini, teknologi pemaparan kad grafik, sebagai teknologi pemprosesan grafik berprestasi tinggi, telah mendapat perhatian yang lebih. Teknologi pemaparan kad grafik digunakan secara meluas dalam pembangunan permainan, filem dan kesan khas televisyen, pemodelan kejuruteraan dan bidang lain. Bagi pembangun, memilih rangka kerja yang sesuai dengan projek mereka adalah keputusan yang sangat penting. Antara bahasa semasa, PHP ialah bahasa yang sangat dinamik Beberapa rangka kerja PHP yang sangat baik seperti Yii2, Ph

KB5012643 untuk Windows 11 memecahkan apl .NET Framework 3.5 KB5012643 untuk Windows 11 memecahkan apl .NET Framework 3.5 May 09, 2023 pm 01:07 PM

Sudah seminggu sejak kita bercakap tentang pepijat mod selamat baharu yang menjejaskan pengguna yang memasang KB5012643 untuk Windows 11. Isu menjengkelkan ini tidak muncul dalam senarai isu yang diketahui yang disiarkan oleh Microsoft pada hari pelancaran, lantas mengejutkan semua orang. Nah, apabila anda fikir keadaan tidak akan menjadi lebih buruk, Microsoft menjatuhkan bom lain untuk pengguna yang telah memasang kemas kini kumulatif ini. Windows 11 Build 22000.652 menyebabkan lebih banyak masalah Jadi syarikat teknologi memberi amaran kepada pengguna Windows 11 bahawa mereka mungkin mengalami masalah melancarkan dan menggunakan beberapa aplikasi .NET Framework 3.5. Bunyi biasa? Tapi tolong jangan terkejut

Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap Pertanyaan data dalam rangka kerja Yii: capai data dengan cekap Jun 21, 2023 am 11:22 AM

Rangka kerja Yii ialah rangka kerja aplikasi Web PHP sumber terbuka yang menyediakan pelbagai alatan dan komponen untuk memudahkan proses pembangunan aplikasi Web, yang mana pertanyaan data merupakan salah satu komponen penting. Dalam rangka kerja Yii, kita boleh menggunakan sintaks seperti SQL untuk mengakses pangkalan data untuk membuat pertanyaan dan memanipulasi data dengan cekap. Pembina pertanyaan rangka kerja Yii terutamanya termasuk jenis berikut: pertanyaan ActiveRecord, pertanyaan QueryBuilder, pertanyaan arahan dan pertanyaan SQL asal

Bagaimana untuk menggunakan rangka kerja Yii3 dalam php? Bagaimana untuk menggunakan rangka kerja Yii3 dalam php? May 31, 2023 pm 10:42 PM

Memandangkan Internet terus berkembang, permintaan untuk pembangunan aplikasi web juga semakin tinggi. Bagi pembangun, membangunkan aplikasi memerlukan rangka kerja yang stabil, cekap dan berkuasa, yang boleh meningkatkan kecekapan pembangunan. Yii ialah rangka kerja PHP berprestasi tinggi terkemuka yang menyediakan ciri yang kaya dan prestasi yang baik. Yii3 ialah versi generasi seterusnya bagi rangka kerja Yii, yang seterusnya mengoptimumkan prestasi dan kualiti kod berdasarkan Yii2. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Yii3 untuk membangunkan aplikasi PHP.

See all articles