亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄 搜尋
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級(jí) 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗(yàn)收測試(Acceptance Tests) 測試夾具(Fixtures) 高級(jí)專題 高級(jí)應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
文字

收集列表輸入

收集列表輸入

有時(shí)你需要在一個(gè)表單中以單一的形式處理多個(gè)模型。例如,有多個(gè)設(shè)置,每個(gè)設(shè)置存儲(chǔ)為一個(gè) name-value,并通過?Setting?活動(dòng)記錄模型來表示。 這種形式也常被稱為“列表輸入”。與此相反,處理不同模型的不同類型,在多模型同時(shí)輸入章節(jié)中介紹。

下面展示了如何在 Yii 中收集列表輸入。

在三種不同的情況下,所需處理的略有不同:

  • 從數(shù)據(jù)庫中更新一組固定的記錄
  • 創(chuàng)建一個(gè)動(dòng)態(tài)的新記錄集
  • 更新、創(chuàng)建和刪除一頁記錄

與之前介紹的單一模型表單相反,我們現(xiàn)在用的是一個(gè)數(shù)組類的模型。這個(gè)數(shù)組將每個(gè)模型傳遞到視圖并以一種類似于表格的方式來顯示表單字段。 我們使用 yii\base\Model 助手類方法來一次性地加載和驗(yàn)證多模型數(shù)據(jù):

  • yii\base\Model::loadMultiple() 將數(shù)據(jù)加載到一個(gè)數(shù)組中。
  • yii\base\Model::validateMultiple() 驗(yàn)證一系列模型。

更新一組固定的記錄

讓我們從控制器的動(dòng)作開始:

<?php

namespace app\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use app\models\Setting;

class SettingsController extends Controller{
    // ...

    public function actionUpdate()
    {
        $settings = Setting::find()->indexBy('id')->all();

        if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
            foreach ($settings as $setting) {
                $setting->save(false);
            }
            return $this->redirect('index');
        }

        return $this->render('update', ['settings' => $settings]);
    }
}

在上面的代碼中,當(dāng)用模型來從數(shù)據(jù)庫獲取數(shù)據(jù)時(shí),我們使用 yii\db\ActiveQuery::indexBy() 來讓模型的主鍵成為一個(gè)數(shù)組的索引。 其中 yii\base\Model::loadMultiple() 用于接收以 POST 方式提交的表單數(shù)據(jù)并填充多個(gè)模型, yii\base\Model::validateMultiple() 一次驗(yàn)證多個(gè)模型。 正如我們之前驗(yàn)證的模型,使用了?validateMultiple(),現(xiàn)在通過傳遞?false?作為 yii\db\ActiveRecord::save() 的一個(gè)參數(shù)使其不會(huì)重復(fù)驗(yàn)證兩次。

現(xiàn)在在?update?視圖的表單:

<?phpuse yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin();

foreach ($settings as $index => $setting) {
    echo $form->field($setting, "[$index]value")->label($setting->name);
}

ActiveForm::end();

在這里,我們?yōu)槊總€(gè)設(shè)置渲染了名字和一個(gè)帶值的輸入。重要的是給 input name 增加添加適當(dāng)?shù)乃饕?因?yàn)檫@是由 yii\base\Model::loadMultiple() 來決定以哪些值來填補(bǔ)哪個(gè)模型。

創(chuàng)建一組動(dòng)態(tài)的新記錄

創(chuàng)造新的記錄與修改記錄很相似,除部分實(shí)例化模型不同之外:

public function actionCreate(){
    $count = count(Yii::$app->request->post('Setting', []));
    $settings = [new Setting()];
    for($i = 1; $i < $count; $i++) {
        $settings[] = new Setting();
    }

    // ...
}

在這里,我們創(chuàng)建了一個(gè)初始的?$settings?數(shù)組包含一個(gè)默認(rèn)的模型,所以始終至少有一個(gè)文本字段是可見的。 此外,我們?yōu)槊總€(gè)可能會(huì)收到的輸入行添加更多的模型。

在視圖中,可以使用 JavaScript 來動(dòng)態(tài)地添加新的輸入行。

把更新,創(chuàng)建和刪除結(jié)合在一個(gè)頁面上

注意:此章節(jié)正在開發(fā)中。

還沒有內(nèi)容。

TBD
上一篇: 下一篇: