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

Verzeichnis suchen
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 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ǎ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) 最佳安全實(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) 錯誤處理(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)
Figuren

使用數(shù)據(jù)庫

使用數(shù)據(jù)庫

本章節(jié)將介紹如何如何創(chuàng)建一個從數(shù)據(jù)表?country?中讀取國家數(shù)據(jù)并顯示出來的頁面。為了實(shí)現(xiàn)這個目標(biāo),你將會配置一個數(shù)據(jù)庫連接,創(chuàng)建一個活動記錄類,并且創(chuàng)建一個操作及一個視圖。

貫穿整個章節(jié),你將會學(xué)到:

  • 配置一個數(shù)據(jù)庫連接
  • 定義一個活動記錄類
  • 使用活動記錄從數(shù)據(jù)庫中查詢數(shù)據(jù)
  • 以分頁方式在視圖中顯示數(shù)據(jù)

請注意,為了掌握本章你應(yīng)該具備最基本的數(shù)據(jù)庫知識和使用經(jīng)驗。尤其是應(yīng)該知道如何創(chuàng)建數(shù)據(jù)庫,如何通過數(shù)據(jù)庫終端執(zhí)行 SQL 語句。

準(zhǔn)備數(shù)據(jù)庫

首先創(chuàng)建一個名為?yii2basic?的數(shù)據(jù)庫,應(yīng)用將從這個數(shù)據(jù)庫中讀取數(shù)據(jù)。你可以創(chuàng)建 SQLite,MySQL,PostregSQL,MSSQL 或 Oracle 數(shù)據(jù)庫,Yii 內(nèi)置多種數(shù)據(jù)庫支持。簡單起見,后面的內(nèi)容將以 MySQL 為例做演示。

然后在數(shù)據(jù)庫中創(chuàng)建一個名為?country?的表并插入簡單的數(shù)據(jù)??梢詧?zhí)行下面的語句:

CREATE TABLE `country` (
  `code` CHAR(2) NOT NULL PRIMARY KEY,
  `name` CHAR(52) NOT NULL,
  `population` INT(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `country` VALUES ('AU','Australia',18886000);INSERT INTO `country` VALUES ('BR','Brazil',170115000);INSERT INTO `country` VALUES ('CA','Canada',1147000);INSERT INTO `country` VALUES ('CN','China',1277558000);INSERT INTO `country` VALUES ('DE','Germany',82164700);INSERT INTO `country` VALUES ('FR','France',59225700);INSERT INTO `country` VALUES ('GB','United Kingdom',59623400);INSERT INTO `country` VALUES ('IN','India',1013662000);INSERT INTO `country` VALUES ('RU','Russia',146934000);INSERT INTO `country` VALUES ('US','United States',278357000);

此時便有了一個名為?yii2basic?的數(shù)據(jù)庫,在這個數(shù)據(jù)庫中有一個包含三個字段的數(shù)據(jù)表?country,表中有十行數(shù)據(jù)。

配置數(shù)據(jù)庫連接

開始之前,請確保你已經(jīng)安裝了 PHP?PDO?擴(kuò)展和你所使用的數(shù)據(jù)庫的 PDO 驅(qū)動(例如 MySQL 的?pdo_mysql)。對于使用關(guān)系型數(shù)據(jù)庫來講,這是基本要求。

驅(qū)動和擴(kuò)展安裝可用后,打開?config/db.php?修改里面的配置參數(shù)對應(yīng)你的數(shù)據(jù)庫配置。該文件默認(rèn)包含這些內(nèi)容:

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2basic',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
];

config/db/php?是一個典型的基于文件的配置工具。這個文件配置了數(shù)據(jù)庫連接 yii\db\Connection 的創(chuàng)建和初始化參數(shù),應(yīng)用的 SQL 查詢正是基于這個數(shù)據(jù)庫。

上面配置的數(shù)據(jù)庫連接可以在應(yīng)用中通過?Yii::$app->db?表達(dá)式訪問。

補(bǔ)充:config/db.php?將被包含在應(yīng)用配置文件?config/web.php?中,后者指定了整個應(yīng)用如何初始化。請參考配置章節(jié)了解更多信息。

創(chuàng)建活動記錄

創(chuàng)建一個繼承自活動記錄類的類?Country,把它放在?models/Country.php?文件,去代表和讀取?country?表的數(shù)據(jù)。

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Country extends ActiveRecord{
}

這個?Country?類繼承自 yii\db\ActiveRecord。你不用在里面寫任何代碼。只需要像現(xiàn)在這樣,Yii 就能根據(jù)類名去猜測對應(yīng)的數(shù)據(jù)表名。

補(bǔ)充:如果類名和數(shù)據(jù)表名不能直接對應(yīng),可以覆寫 yii\db\ActiveRecord::tableName() 方法去顯式指定相關(guān)表名。

使用?Country?類可以很容易地操作?country?表數(shù)據(jù),就像這段代碼:

use app\models\Country;

// 獲取 country 表的所有行并以 name 排序$countries = Country::find()->orderBy('name')->all();

// 獲取主鍵為 “US” 的行$country = Country::findOne('US');

// 輸出 “United States”echo $country->name;

// 修改 name 為 “U.S.A.” 并在數(shù)據(jù)庫中保存更改$country->name = 'U.S.A.';
$country->save();

補(bǔ)充:活動記錄是面向?qū)ο蟆⒐δ軓?qiáng)大的訪問和操作數(shù)據(jù)庫數(shù)據(jù)的方式。你可以在活動記錄章節(jié)了解更多信息。除此之外你還可以使用另一種更原生的被稱做數(shù)據(jù)訪問對象的方法操作數(shù)據(jù)庫數(shù)據(jù)。

創(chuàng)建操作

為了向最終用戶顯示國家數(shù)據(jù),你需要創(chuàng)建一個操作。相比之前小節(jié)掌握的在?site?控制器中創(chuàng)建操作,在這里為所有和國家有關(guān)的數(shù)據(jù)新建一個控制器更加合理。新控制器名為?CountryController,并在其中創(chuàng)建一個?index?操作,如下:

<?php

namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\Country;

class CountryController extends Controller{
    public function actionIndex()
    {
        $query = Country::find();

        $pagination = new Pagination([
            'defaultPageSize' => 5,
            'totalCount' => $query->count(),
        ]);

        $countries = $query->orderBy('name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        return $this->render('index', [
            'countries' => $countries,
            'pagination' => $pagination,
        ]);
    }
}

把上面的代碼保存在?controllers/CountryController.php?文件中。

index?操作調(diào)用了活動記錄?Country::find()?方法,去生成查詢語句并從?country?表中取回所有數(shù)據(jù)。為了限定每個請求所返回的國家數(shù)量,查詢在 yii\data\Pagination 對象的幫助下進(jìn)行分頁。?Pagination?對象的使命主要有兩點(diǎn):

  • 為 SQL 查詢語句設(shè)置?offset?和?limit?從句,確保每個請求只需返回一頁數(shù)據(jù)(本例中每頁是 5 行)。
  • 在視圖中顯示一個由頁碼列表組成的分頁器,這點(diǎn)將在后面的段落中解釋。

在代碼末尾,index?操作渲染一個名為?index?的視圖,并傳遞國家數(shù)據(jù)和分頁信息進(jìn)去。

創(chuàng)建視圖

在?views?目錄下先創(chuàng)建一個名為?country?的子目錄。這個目錄存儲所有由?country?控制器渲染的視圖。在?views/country?目錄下創(chuàng)建一個名為?index.php?的視圖文件,內(nèi)容如下:

<?phpuse yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Countries</h1>
<ul>
<?php foreach ($countries as $country): ?>
    <li>
        <?= Html::encode("{$country->name} ({$country->code})") ?>:
        <?= $country->population ?>
    </li>
<?php endforeach; ?>
</ul>

<?= LinkPager::widget(['pagination' => $pagination]) ?>

這個視圖包含兩部分用以顯示國家數(shù)據(jù)。第一部分遍歷國家數(shù)據(jù)并以無序 HTML 列表渲染出來。第二部分使用 yii\widgets\LinkPager 去渲染從操作中傳來的分頁信息。小部件?LinkPager?顯示一個分頁按鈕的列表。點(diǎn)擊任何一個按鈕都會跳轉(zhuǎn)到對應(yīng)的分頁。

試運(yùn)行

瀏覽器訪問下面的 URL 看看能否工作:

http://hostname/index.php?r=country/index

國家列表

首先你會看到顯示著五個國家的列表頁面。在國家下面,你還會看到一個包含四個按鈕的分頁器。如果你點(diǎn)擊按鈕 “2”,將會跳轉(zhuǎn)到顯示另外五個國家的頁面,也就是第二頁記錄。如果觀察仔細(xì)點(diǎn)你還會看到瀏覽器的 URL 變成了:

http://hostname/index.php?r=country/index&page=2

在這個場景里,yii\data\Pagination 提供了為數(shù)據(jù)結(jié)果集分頁的所有功能:

  • 首先 yii\data\Pagination 把 SELECT 的子查詢?LIMIT 5 OFFSET 0?數(shù)據(jù)表示成第一頁。因此開頭的五條數(shù)據(jù)會被取出并顯示。
  • 然后小部件 yii\widgets\LinkPager 使用 yii\data\Pagination::createUrl() 方法生成的 URL 去渲染翻頁按鈕。URL 中包含必要的參數(shù)page?才能查詢不同的頁面編號。
  • 如果你點(diǎn)擊按鈕 “2”,將會發(fā)起一個路由為?country/index?的新請求。yii\data\Pagination 接收到 URL 中的?page?參數(shù)把當(dāng)前的頁碼設(shè)為 2。新的數(shù)據(jù)庫請求將會以?LIMIT 5 OFFSET 5?查詢并顯示。

總結(jié)

本章節(jié)中你學(xué)到了如何使用數(shù)據(jù)庫。你還學(xué)到了如何取出并使用 yii\data\Pagination 和 yii\widgets\LinkPager 顯示數(shù)據(jù)。

下一章中你會學(xué)到如何使用 Yii 中強(qiáng)大的代碼生成器?Gii,去幫助你實(shí)現(xiàn)一些常用的功能需求,例如增查改刪(CRUD)數(shù)據(jù)表中的數(shù)據(jù)。事實(shí)上你之前所寫的代碼全部都可以由 Gii 自動生成。
Vorheriger Artikel: N?chster Artikel: