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

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

小部件

小部件

小部件是在?視圖?中使用的可重用單元,使用面向對象方式創(chuàng)建復雜和可配置用戶界面單元。 例如,日期選擇器小部件可生成一個精致的允許用戶選擇日期的日期選擇器, 你只需要在視圖中插入如下代碼:

<?phpuse yii\jui\DatePicker;
?><?= DatePicker::widget(['name' => 'date']) ?>

Yii提供許多優(yōu)秀的小部件,比如yii\widgets\ActiveForm, [yii\widgets\Menu|menu]],?jQuery UI widgets,?Twitter Bootstrap widgets。 接下來介紹小部件的基本知識,如果你想了解某個小部件請參考對應的類API文檔。

使用小部件

小部件基本上在views中使用,在視圖中可調用 yii\base\Widget::widget() 方法使用小部件。 該方法使用?配置?數組初始化小部件并返回小部件渲染后的結果。 例如如下代碼插入一個日期選擇器小部件,它配置為使用俄羅斯語,輸入框內容為$modelfrom_date屬性值。

<?phpuse yii\jui\DatePicker;
?><?= DatePicker::widget([
    'model' => $model,
    'attribute' => 'from_date',
    'language' => 'ru',
    'clientOptions' => [
        'dateFormat' => 'yy-mm-dd',
    ],
]) ?>

一些小部件可在yii\base\Widget::begin() 和 yii\base\Widget::end() 調用中使用數據內容。Some widgets can take a block of content which should be enclosed between the invocation of 例如如下代碼使用yii\widgets\ActiveForm小部件生成一個登錄表單, 小部件會在begin()?和0?end()執(zhí)行處分別生成<form>的開始標簽和結束標簽,中間的任何代碼也會被渲染。

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

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>

    <?= $form->field($model, 'username') ?>

    <?= $form->field($model, 'password')->passwordInput() ?>

    <div class="form-group">
        <?= Html::submitButton('Login') ?>
    </div>

<?php ActiveForm::end(); ?>

注意和調用 yii\base\Widget::widget() 返回渲染結果不同, 調用 yii\base\Widget::begin() 方法返回一個可組建小部件內容的小部件實例。

創(chuàng)建小部件

Creating Widgets

繼承 yii\base\Widget 類并覆蓋 yii\base\Widget::init() 和/或 yii\base\Widget::run() 方法可創(chuàng)建小部件。通常init()?方法處理小部件屬性,?run()?方法包含小部件生成渲染結果的代碼。 渲染結果可在run()方法中直接"echoed"輸出或以字符串返回。

如下代碼中HelloWidget編碼并顯示賦給message?屬性的值, 如果屬性沒有被賦值,默認會顯示"Hello World"。

namespace app\components;

use yii\base\Widget;
use yii\helpers\Html;

class HelloWidget extends Widget{
    public $message;

    public function init()
    {
        parent::init();
        if ($this->message === null) {
            $this->message = 'Hello World';
        }
    }

    public function run()
    {
        return Html::encode($this->message);
    }
}

使用這個小部件只需在視圖中簡單使用如下代碼:

<?phpuse app\components\HelloWidget;
?><?= HelloWidget::widget(['message' => 'Good morning']) ?>

以下是另一種可在begin()?和?end()調用中使用的HelloWidget,HTML編碼內容然后顯示。

namespace app\components;

use yii\base\Widget;
use yii\helpers\Html;

class HelloWidget extends Widget{
    public function init()
    {
        parent::init();
        ob_start();
    }

    public function run()
    {
        $content = ob_get_clean();
        return Html::encode($content);
    }
}

如上所示,PHP輸出緩沖在init()啟動,所有在init()?和?run()方法之間的輸出內容都會被獲取,并在run()處理和返回。

補充: 當你調用 yii\base\Widget::begin() 時會創(chuàng)建一個新的小部件實例并在構造結束時調用init()方法, 在end()時會調用run()方法并輸出返回結果。

如下代碼顯示如何使用這種?HelloWidget:

<?phpuse app\components\HelloWidget;
?><?php HelloWidget::begin(); ?>

    content that may contain <tag>'s

<?php HelloWidget::end(); ?>

有時小部件需要渲染很多內容,一種更好的辦法是將內容放入一個視圖文件, 然后調用yii\base\Widget::render()方法渲染該視圖文件,例如:

public function run(){
    return $this->render('hello');
}

小部件的視圖文件默認存儲在WidgetPath/views目錄,WidgetPath代表小部件類文件所在的目錄。 假如上述示例小部件類文件在@app/components下,會渲染@app/components/views/hello.php視圖文件。 You may override 可以覆蓋yii\base\Widget::getViewPath()方法自定義視圖文件所在路徑。

最佳實踐

小部件是面向對象方式來重用視圖代碼。

創(chuàng)建小部件時仍需要遵循MVC模式,通常邏輯代碼在小部件類,展示內容在視圖中。

小部件設計時應是獨立的,也就是說使用一個小部件時候,可以直接丟棄它而不需要額外的處理。 但是當小部件需要外部資源如CSS, JavaScript, 圖片等會比較棘手, 幸運的時候Yii提供?資源包?來解決這個問題。

當一個小部件只包含視圖代碼,它和視圖很相似, 實際上,在這種情況下,唯一的區(qū)別是小部件是可以重用類,視圖只是應用中使用的普通PHP腳本。
上一篇: 下一篇: