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

目錄 搜索
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應(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) 請求處理 運行概述 啟動引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(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) 最佳安全實踐(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) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
文字

Html 助手

Html 幫助類

任何一個 web 應(yīng)用程序會生成很多 HTMl 超文本標(biāo)記。如果超文本標(biāo)記是靜態(tài)的, 那么將 PHP 和 HTML 混合在一個文件里?這種做法是非常高效的。但是,如果這些超文本標(biāo)記是動態(tài)生成的,那么如果沒有額外的輔助工具,這個過程將會變得復(fù)雜。 Yii 通過 HTML 幫助類來提供生成超文本標(biāo)記的方法。這個幫助類包含有一系列的用于處理通用的 HTML 標(biāo)簽和其屬性以及內(nèi)容的靜態(tài)方法。

注意:如果你的超文本標(biāo)記接近靜態(tài)的,那么最好是直接使用 HTML。 沒有必要把所有的超文本標(biāo)記都用 HTML 輔助類來生成。

基礎(chǔ)

由于通過字符串連接來生成動態(tài)的 HTML 會很容易變得凌亂, Yii 提供了一系列的靜態(tài)方法來操作標(biāo)簽配置并基于這些配置來創(chuàng)建對應(yīng)的標(biāo)簽。

生成標(biāo)簽

生成一個標(biāo)簽的代碼類似如下:

<?= Html::tag('p', Html::encode($user->name), ['class' => 'username']) ?>

這個方法的第一個參數(shù)是標(biāo)簽名稱。第二個是要裝入到開始和結(jié)束標(biāo)簽間的內(nèi)容。 注意到我們使用?Html::encode?。那是因為內(nèi)容不會被自動的轉(zhuǎn)碼以允許在有需要的時候嵌套 HTML。 第三個參數(shù)是一個 HTML 配置數(shù)組,或者換言之,標(biāo)簽屬性。在這個數(shù)組中,數(shù)組的下標(biāo)是屬性名稱, 比如?class,target="_blank" href?或者?target,而值則是對應(yīng)屬性的值。

以上代碼會生成如下 HTML :

<p class="username">samdark</p>

如果你只需要開啟一個標(biāo)簽或者關(guān)閉一個標(biāo)簽,你可以使用?Html::beginTag()?和?Html::endTag()?方法。

標(biāo)簽屬性( Options )在 Html 幫助類很多方法和大量的小部件中都有使用。在這些情況下, 有一些額外的處理我們需要知道:

  • 如果一個值為 null ,那么對應(yīng)的屬性將不會被渲染。
  • 如果是布爾類型的值的屬性,將會被當(dāng)做?布爾屬性?來處理。
  • 屬性的值將會用 yii\helpers\Html::encode() 方法進(jìn)行 HTML 轉(zhuǎn)碼處理。
  • 如果一個屬性的值是一個數(shù)組,那么它將會被如下處理:

    • 如果這個屬性是一個如 yii\helpers\Html::$dataAttributes 所列的數(shù)據(jù)屬性, 比如?data?或者?ng,一系列的屬性列表將會被渲染,每個代表值數(shù)組中的元素。 比如:?'data' => ['id' => 1, 'name' => 'yii']?將會生成?data-id="1" data-name="yii";?'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok']?生成?data-params='{"id":1,"name":"yii"}' data-status="ok"。 注意后者 中,一個子數(shù)組被輸出為 JSON 。
    • 如果這個屬性不是一個數(shù)據(jù)屬性,那么值將會被 JSON-encoded。比如:['params' => ['id' => 1, 'name' => 'yii']?生成?params='{"id":1,"name":"yii"}'

生成 CSS 類和樣式

當(dāng)開始構(gòu)造一個 HTML 標(biāo)簽的屬性時,我們經(jīng)常需要對默認(rèn)的屬性進(jìn)行修改。 為了添加或者刪除 CSS 類,你可以使用如下代碼:

$options = ['class' => 'btn btn-default'];

if ($type === 'success') {
    Html::removeCssClass($options, 'btn-default');
    Html::addCssClass($options, 'btn-success');
}

echo Html::tag('div', 'Pwede na', $options);

// in case of $type of 'success' it will render// <div class="btn btn-success">Pwede na</div>

基于同樣的目的,針對?style?屬性:

$options = ['style' => ['width' => '100px', 'height' => '100px']];

// gives style="width: 100px; height: 200px; position: absolute;"
Html::addCssStyle($options, 'height: 200px; position: absolute;');

// gives style="position: absolute;"
Html::removeCssStyle($options, ['width', 'height']);

當(dāng)使用 yii\helpers\Html::addCssStyle() 方法時,你可以指定一個和 CSS 屬性相關(guān)的名值對的數(shù)組, 也可以直接是一個類似?width: 100px; height: 200px;?的字符串。這些格式將會自動的被 yii\helpers\Html::cssStyleFromArray() 和yii\helpers\Html::cssStyleToArray() 方法進(jìn)行轉(zhuǎn)換。方法 yii\helpers\Html::removeCssStyle() 接收一個包含要被移除的屬性數(shù)組作為參數(shù)。 如果只想移除一個屬性,你可以直接傳遞一個字符串。

標(biāo)簽內(nèi)容的轉(zhuǎn)碼和解碼

為了讓內(nèi)容能夠正確安全的顯示,一些 HTML 特殊字符應(yīng)該被轉(zhuǎn)碼。在 PHP 中, 這個操作由?htmlspecialchars?和htmlspecialchars_decode?完成。 直接使用這些方法的問題是,你總是需要指定轉(zhuǎn)碼所需的額外標(biāo)志。由于標(biāo)志一般總是不變的,而內(nèi)容轉(zhuǎn)碼的過程為了避免一些安全問題, 需要和應(yīng)用的默認(rèn)過程匹配, Yii 提供了兩個簡單可用的對 PHP 原生方法的封裝:

$userName = Html::encode($user->name);
echo $userName;

$decodedUserName = Html::decode($userName);

表單

處理表單標(biāo)簽是大量的重復(fù)性勞動并且易錯。因此, Yii 也提供了一系列的方法來輔助處理表單標(biāo)簽。

注意: 考慮在處理 models 以及需要驗證的情形下,使用 yii\widgets\ActiveForm 組件。

創(chuàng)建表單

表單可以用類似如下代碼,使用 yii\helpers\Html::beginForm() 方法開啟:

<?= Html::beginForm(['order/update', 'id' => $id], 'post', ['enctype' => 'multipart/form-data']) ?>

方法的第一個參數(shù)為表單將要被提交的 URL 地址。它可以以 Yii 路由的形式被指定,并由 yii\helpers\Url::to() 來接收處理。 第二個參數(shù)是使用的方法,默認(rèn)為?post?方法。第三個參數(shù)為表單標(biāo)簽的屬性數(shù)組。在上面的例子中, 我們把編碼 POST 請求中的表單數(shù)據(jù)的方式改為?multipart/form-data。 如果是上傳文件,這個調(diào)整是必須的。

關(guān)閉表單標(biāo)簽非常簡單:

<?= Html::endForm() ?>

按鈕

你可以用如下代碼生成按鈕:

<?= Html::button('Press me!', ['class' => 'teaser']) ?><?= Html::submitButton('Submit', ['class' => 'submit']) ?><?= Html::resetButton('Reset', ['class' => 'reset']) ?>

上述三個方法的第一個參數(shù)為按鈕的標(biāo)題,第二個是標(biāo)簽屬性。標(biāo)題默認(rèn)沒有進(jìn)行轉(zhuǎn)碼,如果標(biāo)題是由終端用輸入的,那么請自行用 yii\helpers\Html::encode() 方法進(jìn)行轉(zhuǎn)碼。

輸入欄

input 相關(guān)的方法有兩組:以?active?開頭的被稱為 active inputs,另一組則不以其開頭。 active inputs 依據(jù)指定的模型和屬性獲取數(shù)據(jù),而普通 input 則是直接指定數(shù)據(jù)。

一般用法如下:

type, input name, input value, options
<?= Html::input('text', 'username', $user->name, ['class' => $username]) ?>

type, model, model attribute name, options
<?= Html::activeInput('text', $user, 'name', ['class' => $username]) ?>

如果你知道 input 類型,更方便的做法是使用以下快捷方法:

  • yii\helpers\Html::buttonInput()
  • yii\helpers\Html::submitInput()
  • yii\helpers\Html::resetInput()
  • yii\helpers\Html::textInput(), yii\helpers\Html::activeTextInput()
  • yii\helpers\Html::hiddenInput(), yii\helpers\Html::activeHiddenInput()
  • yii\helpers\Html::passwordInput() / yii\helpers\Html::activePasswordInput()
  • yii\helpers\Html::fileInput(), yii\helpers\Html::activeFileInput()
  • yii\helpers\Html::textarea(), yii\helpers\Html::activeTextarea()

Radios 和 checkboxes 在方法的聲明上有一點點不同:

<?= Html::radio('agree', true, ['label' => 'I agree']);
<?= Html::activeRadio($model, 'agree', ['class' => 'agreement'])

<?= Html::checkbox('agree', true, ['label' => 'I agree']);
<?= Html::activeCheckbox($model, 'agree', ['class' => 'agreement'])

Dropdown list 和 list box 將會如下渲染:

<?= Html::dropDownList('list', $currentUserId, ArrayHelper::map($userModels, 'id', 'name')) ?><?= Html::activeDropDownList($users, 'id', ArrayHelper::map($userModels, 'id', 'name')) ?>

<?= Html::listBox('list', $currentUserId, ArrayHelper::map($userModels, 'id', 'name')) ?><?= Html::activeListBox($users, 'id', ArrayHelper::map($userModels, 'id', 'name')) ?>

第一個參數(shù)是 input 的名稱,第二個是當(dāng)前選中的值,第三個則是一個下標(biāo)為列表值, 值為列表標(biāo)簽的名值對數(shù)組。

如果你需要使用多項選擇, checkbox list 應(yīng)該能夠符合你的需求:

<?= Html::checkboxList('roles', [16, 42], ArrayHelper::map($roleModels, 'id', 'name')) ?><?= Html::activeCheckboxList($user, 'role', ArrayHelper::map($roleModels, 'id', 'name')) ?>

否則,用 radio list :

<?= Html::radioList('roles', [16, 42], ArrayHelper::map($roleModels, 'id', 'name')) ?><?= Html::activeRadioList($user, 'role', ArrayHelper::map($roleModels, 'id', 'name')) ?>

Labels 和 Errors

如同 inputs 一樣,Yii 也提供了兩個方法用于生成表單 label 。 帶 ative 方法用于從 model 中取數(shù)據(jù),另外一個則是直接接收數(shù)據(jù)。

<?= Html::label('User name', 'username', ['class' => 'label username']) ?><?= Html::activeLabel($user, 'username', ['class' => 'label username'])

為了從一個或者一組 model 中顯示表單的概要錯誤,你可以使用如下方法:

<?= Html::errorSummary($posts, ['class' => 'errors']) ?>

為了顯示單個錯誤:

<?= Html::error($post, 'title', ['class' => 'error']) ?>

Input 的名和值

Yii 提供了方法用于從 model 中獲取 input 的名稱,ids,值。這些主要用于內(nèi)部調(diào)用, 但是有時候你也需要使用它們:

// Post[title]echo Html::getInputName($post, 'title');

// post-titleecho Html::getInputId($post, 'title');

// my first postecho Html::getAttributeValue($post, 'title');

// $post->authors[0]echo Html::getAttributeValue($post, '[0]authors[0]');

在上面的例子中,第一個參數(shù)為模型,而第二個參數(shù)是屬性表達(dá)式。 在最簡單的表單中,這個屬性表達(dá)式就是屬性名稱,但是在一些多行輸入的時候, 它也可以是屬性名以數(shù)組下標(biāo)前綴或者后綴(也可能是同時)。

  • [0]content?代表多行輸入時第一個 model 的 content 屬性的數(shù)據(jù)值。
  • dates[0]?代表 dates 屬性的第一個數(shù)組元素。
  • [0]dates[0]?代表多行輸入時第一個 model 的 dates 屬性的第一個數(shù)組元素。

為了獲取一個沒有前綴或者后綴的屬性名稱,我們可以如下做:

// datesecho Html::getAttributeName('dates[0]');

樣式表和腳本

Yii 提供兩個方法用于生成包含內(nèi)聯(lián)樣式和腳本代碼的標(biāo)簽。

<?= Html::style('.danger { color: #f00; }') ?>

Gives you

<style>.danger { color: #f00; }</style>


<?= Html::script('alert("Hello!");', ['defer' => true]);

Gives you

<script defer>alert("Hello!");</script>

如果你想要外聯(lián) css 樣式文件,可以如下做:

<?= Html::cssFile('@web/css/ie5.css', ['condition' => 'IE 5']) ?>

generates

<!--[if IE 5]>
    <link target="_blank" href="http://example.com/css/ie5.css" />
<![endif]-->

第一個參數(shù)是 URL。第二個參數(shù)是標(biāo)簽屬性數(shù)組。比普通的標(biāo)簽配置項額外多出的是,你可以指定:

  • condition?來讓?<link?被條件控制注釋包裹( IE hacker )。 希望你在未來不再需要條件控制注釋。
  • noscript?可以被設(shè)置為?true?,這樣?<link就會被?<noscript>包裹,如此那么這段代碼只有在瀏覽器不支持 JavaScript 或者被用戶禁用的時候才會被引入進(jìn)來。

為了外聯(lián) JavaScript 文件:

<?= Html::jsFile('@web/js/main.js') ?>

這個方法的第一個參數(shù)同 CSS 一樣用于指定外聯(lián)鏈接。第二個參數(shù)是一個標(biāo)簽屬性數(shù)組。 同?cssFile?一樣,你可以指定?condtion?配置項。

超鏈接

有一個方法可以用于便捷的生成超鏈接:

<?= Html::a('Profile', ['user/view', 'id' => $id], ['class' => 'profile-link']) ?>

第一個參數(shù)是超鏈接的標(biāo)題。它不會被轉(zhuǎn)碼,所以如果是用戶輸入數(shù)據(jù), 你需要使用?Html::encode()?方法進(jìn)行轉(zhuǎn)碼。第二個參數(shù)是?<a標(biāo)簽的?target="_blank" href?屬性的值。 關(guān)于該參數(shù)能夠接受的更詳細(xì)的數(shù)據(jù)值,請參閱?Url::to()。第三個參數(shù)是標(biāo)簽的屬性數(shù)組。

在需要的時候,你可以用如下代碼生成?mailto?鏈接:

<?= Html::mailto('Contact us', 'admin@example.com') ?>

圖片

為了生成圖片標(biāo)簽,你可以如下做:

<?= Html::img('@web/images/logo.png', ['alt' => 'My logo']) ?>

generates

<img src="/docs/guide/2.0/http://example.com/images/logo.png" alt="My logo" />

除了?aliases?之外,第一個參數(shù)可以接受 路由,查詢,URLs。 同?Url::to()?一樣。

列表

無序列表可以如下生成:

<?= Html::ul($posts, ['item' => function($item, $index) {
    return Html::tag(
        'li',
        $this->render('post', ['item' => $item]),
        ['class' => 'post']
    );
}]) ?>
有序列表請使用?Html::ol()?方法。
上一篇: 下一篇: