摘要:與關聯的表單中常規的表單,基于創建的表單類,需要一個繼承自的類,比如有一個保證金初始化表單,可能需要一個保證表單類保證金初始化在初始化表單的視圖中,我們需要創建關聯的表單。
與Model關聯的ActiveForm表單
yii2中常規的表單,基于yiiootstrapActiveForm創建的表單類,需要一個繼承自yiiaseModel的ModelForm類,比如有一個保證金初始化表單,可能需要一個保證表單類(DepositInitForm):
modelnamespace backendmodels; use Yii; use yiiaseModel; /** * Login form * 保證金初始化 */ class DepositInitForm extends Model { public $type; public $id; public $uid; /** * @inheritdoc */ public function rules() { return [ [["type", "id", "uid"], "safe"], [["id"], "required"], ]; } }
在初始化表單的view視圖中,我們需要創建關聯的表單。關聯表單的幾個好處:
表單的驗證
表單在修改的時候自動填充
減少代碼量
bootstrap提供的自適應特性
view在init.php視圖中我們可以這樣創建表單:
"deposit-init-form", "layout" => "inline", "method" => "post", "action" => Url::to("deposit/init")]); echo $form->field($model, "type")->dropDownList(["0" => "選擇拍賣類型", "1" => "拍場", "2" => "拍品"]); echo $form->field($model, "id")->textarea(["placeholder" => "請輸入拍場id或者拍品id"]); // 此處用了hidden表單,以后擴展根據用戶uid查詢 echo $form->field($model, "uid")->textarea(["placeholder" => "請輸入添加白名單用戶id,多個用逗號分隔"]); echo Html::button("初始化", ["class" => "btn btn-danger init"]); echo Html::button("查詢", ["class" => "btn btn-default query"]) ?> ActiveForm::end(); ?>controller
在DespositController控制器中可以這樣寫:
/** * 白名單,保證金 */ public function actionInit(){ $model = new ackendmodelsDepositInitForm; $model->type = 1; // 下拉列表默認選中設置 if ($model->load(Yii::$app->request->post()) && $model->validate()) { // TODO 處理業務邏輯 ... } return $this->render("init",["model" => $model]); }基于Html幫助類創建表單
有時候,我們并不想關聯一個model,比如我們需要調用rest服務的時候,我們只是想把表單的數據提交到一個url請求去,此時,我們可以選擇yiihelpersHtml幫助類,創建一個簡單的表單:
view"page-conversion-form", "class" => "form-inline", "role" => "form"]); ?>"所有訂單", "1" => "普通訂單", "2" => "拍賣訂單"], ["class" => "form-control"]); ?>"btn btn-default"]); echo Html::endForm(); // ... ?>
這里寫了一個簡單的根據訂單類型統計轉化率的表單,該表單并不復雜,只有一個下拉列表,所以沒必要創建一個表單,再者,沒必要對type做校驗,如果沒有傳遞該參數,控制器中作默認為0的處理。
controller在StatisticsController控制器中,創建actionConversionRate操作:
public function actionConversionRate() { $query["page"] = isset($_GET["page"]) ? intval($_GET["page"]) : 1; $query["perpage"] = isset($_GET["per-page"]) && $_GET["per-page"] ? $_GET["per-page"] : 15; // type不傳遞的時候,默認為0,為了在頁面顯示選擇類型,并將其傳遞到view做視圖的渲染 $query["type"] = isset($_GET["type"]) ? intval($_GET["type"]) : 0; $api = rtrim(Yii::$app->params["statisticsUrl"], "/") . "/statistics/"; $url = $api . "getConversionRate?" . http_build_query($query); $data = AppHelper::getData($url); $count = AppHelper::getData($api . "getRateCount?type=" . $query["type"]); // 這里面的是一個數據提供器,先不關心 $dataProvider = new ackendextensionsArrayDataProvider( [ "allModels" => $data, "totalCount" => $count, "key" => "ltime", "sort" => [ "attributes" => [ "ltime", ], "defaultOrder" => [ "ltime" => SORT_DESC, ], ], "pagination" => [ "pageSize" => 15, ], ] ); return $this->render("conversionrate", ["dataProvider" => $dataProvider, "type" => $query["type"]]); }純手工寫表單
純手工寫html表單,我相信你會的。我就不寫了。
最后,關于ActiveForm和Html的api參看Yii2官網或者中文網站。文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21706.html
摘要:在中最常用的幾種回調寫法如下匿名函數做為回調匿名函數,也叫閉包函數,允許臨時創建一個沒有指定名稱的函數。最經常用作回調函數參數的值。匿名函數的回調經常將其賦給一個變量或一個對象的屬性最終結果會輸出。 在workerman中會經常使用,我們先寫一個回調函數,當某個行為被觸發后使用該函數處理相關邏輯。 在PHP中最常用的幾種回調寫法如下 匿名函數做為回調 匿名函數(Anonymous fu...
摘要:好比注冊功能模塊,手機號郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。需求分析使用框架自帶的在不刷新頁面的情況下驗證手機號郵箱唯一性。相關資料表單驗證問題注冊時驗證手機號唯一 序言 驗證唯一性很重要,說不上用得很普及,但是也必須要有。好比注冊功能模塊,手機號、郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。那么如何使用Yii2自帶的targetClass驗證唯...
摘要:好比注冊功能模塊,手機號郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。需求分析使用框架自帶的在不刷新頁面的情況下驗證手機號郵箱唯一性。相關資料表單驗證問題注冊時驗證手機號唯一 序言 驗證唯一性很重要,說不上用得很普及,但是也必須要有。好比注冊功能模塊,手機號、郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。那么如何使用Yii2自帶的targetClass驗證唯...
摘要:而且很明顯地,我們可以看到,一旦輸入框在失去焦點的時候,如果里面沒有輸入任何內容,每個輸入框就會有相應的錯誤提示,用戶體驗很不錯。 原文來自: https://jellybool.com/post/programming-with-yii2-exploring-mvc-forms-a... 上一篇文章我們簡單地實現了Yii2框架安裝和Hello World,而在這一篇文章當中...
閱讀 2731·2021-11-24 09:39
閱讀 1647·2021-09-28 09:35
閱讀 1119·2021-09-06 15:02
閱讀 1307·2021-07-25 21:37
閱讀 2726·2019-08-30 15:53
閱讀 3643·2019-08-30 14:07
閱讀 714·2019-08-30 11:07
閱讀 3512·2019-08-29 18:36