国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

Yii2創建表單(ActiveForm)方法詳解

2020-03-22 18:06:38
字體:
來源:轉載
供稿:網友
本文實例講述了Yii2創建表單(ActiveForm)的方法。分享給大家供大家參考,具體如下:由于表單涉及到一些驗證方面的信息,屬性設置又比較多、比較復雜,所以哪里有什么不正確的地方請留言指點目錄表單的生成表單中的方法
ActiveForm::begin()方法
ActiveForm::end()方法
getClientOptions()方法
其它方法:errorSummary、validate、validateMultiple表單中的參數
表單form自身的屬性
表單中各個項(field)輸入框相關的屬性
$fieldConfig
關于驗證的屬性
關于每個field容器樣式的屬性
ajax驗證
前端js事件
表單中的其它屬性我們先看看Yii里面最簡單的登錄表單以及生成的html代碼和界面,先有個直觀的了解 php $form = ActiveForm::begin(['id' = 'login-form']); = $form- field($model, 'username') = $form- field($model, 'password')- passwordInput() = $form- field($model, 'rememberMe')- checkbox() div If you forgot your password you can = Html::a('reset it', ['site/request-password-reset']) /div div = Html::submitButton('Login', ['class' = 'btn btn-primary', 'name' = 'login-button']) /div php ActiveForm::end(); 下面是生成的表單Html,我在里面標明了5部分。1、表單的生成在Yii中表單即ActiveForm也是Widget,在上面可以看到是由begin開始 php $form = ActiveForm::begin(['id' = 'login-form']); 中間為各個項的輸入框,最后由end結尾 php ActiveForm::end(); 2、表單中的方法在Widget中begin()方法會調用int方法public function init()在最后的end()方法會調用run方法public function run()1、ActiveForm::begin()方法//這個是在執行 $form = ActiveForm::begin(['id' = 'login-form']); 中的begin方法的時候調用的public function init() //設置表單元素form的id if (!isset($this- options['id'])) { $this- options['id'] = $this- getId(); //設置表單中間的要生成各個field的所使用的類 if (!isset($this- fieldConfig['class'])) { $this- fieldConfig['class'] = ActiveField::className(); //這個就是輸出表單的開始標簽 //如: form id="login-form" action="/lulublog/frontend/web/index.php r=site/login" method="post" echo Html::beginForm($this- action, $this- method, $this- options);2、ActiveForm::end()方法//這個是在執行 ActiveForm::end(); 中的end方法的時候調用的public function run() //下面這個就是往視圖中注冊表單的js驗證腳本, if (!empty($this- attributes)) { $id = $this- options['id']; $options = Json::encode($this- getClientOptions()); $attributes = Json::encode($this- attributes); $view = $this- getView(); ActiveFormAsset::register($view); * $attributes:為要驗證的所有的field數組。它的值是在activeform中創建field的時候,在field的begin方法中給它賦值的。 * 其中每個field又是一個數組,為這個field的各個參數 * 比如username的field中的參數有 * validate、id、name、 * validateOnChange、validateOnType、validationDelay、 * container、input、error * $options:為這個表單整體的屬性,如: * errorSummary、validateOnSubmit、 * errorCssClass、successCssClass、validatingCssClass、 * ajaxParam、ajaxDataType $view- registerJs("jQuery('#$id').yiiActiveForm($attributes, $options);"); //輸出表單的結束標簽 echo Html::endForm();3、getClientOptions()方法* 設置表單的全局的一些樣式屬性以及js回調事件等protected function getClientOptions() $options = [ 'errorSummary' = '.' . $this- errorSummaryCssClass, 'validateOnSubmit' = $this- validateOnSubmit, 'errorCssClass' = $this- errorCssClass, 'successCssClass' = $this- successCssClass, 'validatingCssClass' = $this- validatingCssClass, 'ajaxParam' = $this- ajaxParam, 'ajaxDataType' = $this- ajaxDataType, if ($this- validationUrl !== null) { $options['validationUrl'] = Url::to($this- validationUrl); foreach (['beforeSubmit', 'beforeValidate', 'afterValidate'] as $name) { if (($value = $this- $name) !== null) { $options[$name] = $value instanceof JsExpression $value : new JsExpression($value); return $options;下面這個是生成的表單驗證Js代碼jQuery(document).ready(function () { jQuery('#login-form').yiiActiveForm( "username":{ "validate":function (attribute, value, messages) { yii.validation.required(value, messages, {"message":"Username cannot be blank."}); "id":"loginform-username", "name":"username", "validateOnChange":true, "validateOnType":false, "validationDelay":200, "container":".field-loginform-username", "input":"#loginform-username", "error":".help-block"}, "password":{ "validate":function (attribute, value, messages) { yii.validation.required(value, messages, {"message":"Password cannot be blank."}); "id":"loginform-password", "name":"password", "validateOnChange":true, "validateOnType":false, "validationDelay":200, "container":".field-loginform-password", "input":"#loginform-password", "error":".help-block" "rememberMe":{ "validate":function (attribute, value, messages) { yii.validation.boolean(value, messages, { "trueValue":"1","falseValue":"0","message":"Remember Me must be either /"1/" or /"0/".","skipOnEmpty":1}); "id":"loginform-rememberme", "name":"rememberMe","validateOnChange":true, "validateOnType":false, "validationDelay":200, "container":".field-loginform-rememberme", "input":"#loginform-rememberme", "error":".help-block"} "errorSummary":".error-summary", "validateOnSubmit":true, "errorCssClass":"has-error", "successCssClass":"has-success", "validatingCssClass":"validating", "ajaxParam":"ajax", "ajaxDataType":"json"4、其它方法:errorSummary、validate、validateMultiplepublic function errorSummary($models, $options = [])它主要就是把model中的所有的錯誤信息匯總到一個div中。public static function validate($model, $attributes = null)public static function validateMultiple($models, $attributes = null)這兩個是獲取錯誤信息的方法,比較簡單也不說了。3、表單中的參數1、表單form自身的屬性$action:設置當前表單提交的url地址,如果為空則是當前的url
$method:提交方法,post或者get,默認為post
$option:這個里面設置表單的其它的屬性,如id等,如果沒有設置id,將會自動生成一個以$autoIdPrefix為前綴的自動增加的id//這個方法在Widget基本中public function getId($autoGenerate = true) if ($autoGenerate && $this- _id === null) { $this- _id = self::$autoIdPrefix . self::$counter++; return $this- 2、表單中各個項(field)輸入框相關的屬性Yii生成的每個field由4部分組成:① 最外層div為每個field的容器,
② label為每個field的文本說明,
③ input為輸入元素,
④ 還有一個div為錯誤提示信息。 div label for="loginform-username" Username /label input type="text" id="loginform-username" name="LoginForm[username]" div Username cannot be blank. /div /div $fieldConfig:這個是所有的field的統一的配置信息設置的屬性。也就是說在field類中的屬性都可以在這里進行設置。public function field($model, $attribute, $options = []) //使用fieldConfig和options屬性來創建field //$options會覆蓋統一的fieldConfig屬性值,以實現每個field的自定義 return Yii::createObject(array_merge($this- fieldConfig, $options, [ 'model' = $model, 'attribute' = $attribute, 'form' = $this,關于驗證的屬性:① $enableClientValidation:是否在客戶端驗證,也即是否生成前端js驗證腳本(如果在form中設置了ajax驗證,也會生成這個js腳本)。
② $enableAjaxValidation:是否是ajax驗證
③ $validateOnChange:在輸入框失去焦點并且值改變的時候驗證
④ $validateOnType:正在輸入的時候就進行驗證
⑤ $validationDelay:驗證延遲的時間,單位為毫秒這5個屬性都可以在創建每個field的時候單獨設置,因為在field類中就有這5個屬性。關于每個field容器樣式的屬性:$requiredCssClass:必填項的樣式,默認為‘required'
$errorCssClass:驗證錯誤的樣式,默認值為‘has-error'
$successCssClass:驗證正確的樣式,默認值為‘has-success'
$validatingCssClass:驗證過程中的樣式,默認值為‘validating'3、ajax驗證$validationUrl:ajax驗證的url地方
$ajaxParam:url中的get參數,用來標明當前是ajax請求,默認值為‘ajax'
$ajaxDataType:ajax請求返回的數據格式4、前端js事件屬性$beforeSubmit:在提交表單之前事件,如果返回false,則不會提交表單,格式為:function ($form) { ...return false to cancel submission...$beforeValidate:在每個屬性在驗證之前觸發,格式為:function ($form, attribute, messages) { ...return false to cancel the validation...$afterValidate:在每個屬性在驗證之后觸發,格式為:function ($form, attribute, messages) {5、表單中的其它屬性$validateOnSubmit:提交表單的時候進行驗證
$errorSummary:總的錯誤提示地方的樣式
$attributes:這個屬性比較特殊,它是在創建field的時候,在field中為這個form中的$attributes賦值的。這樣可以確保通過field方法生成的輸入表單都可以進行驗證更多關于Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 浦江县| 灵武市| 剑河县| 杭州市| 文山县| 阜宁县| 视频| 芜湖县| 同心县| 西吉县| 囊谦县| 甘孜| 南雄市| 禄丰县| 和平县| 临江市| 若尔盖县| 湘潭县| 永德县| 崇信县| 宜阳县| 新竹县| 万载县| 育儿| 突泉县| 大田县| 泰安市| 枞阳县| 礼泉县| 昭苏县| 佛冈县| 原阳县| 临城县| 罗山县| 连云港市| 湟源县| 房产| 台北市| 泰州市| 鄯善县|