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

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

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

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

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

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

  • 配置一個(gè)數(shù)據(jù)庫(kù)連接
  • 定義一個(gè)活動(dòng)記錄類(lèi)
  • 使用活動(dòng)記錄從數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù)
  • 以分頁(yè)方式在視圖中顯示數(shù)據(jù)

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

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

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

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

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);

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

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

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

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

<?php

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

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

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

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

創(chuàng)建活動(dòng)記錄

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

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Country extends ActiveRecord{
}

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

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

使用?Country?類(lèi)可以很容易地操作?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ù)庫(kù)中保存更改$country->name = 'U.S.A.';
$country->save();

補(bǔ)充:活動(dòng)記錄是面向?qū)ο?、功能?qiáng)大的訪(fǎng)問(wèn)和操作數(shù)據(jù)庫(kù)數(shù)據(jù)的方式。你可以在活動(dòng)記錄章節(jié)了解更多信息。除此之外你還可以使用另一種更原生的被稱(chēng)做數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象的方法操作數(shù)據(jù)庫(kù)數(shù)據(jù)。

創(chuàng)建操作

為了向最終用戶(hù)顯示國(guó)家數(shù)據(jù),你需要?jiǎng)?chuàng)建一個(gè)操作。相比之前小節(jié)掌握的在?site?控制器中創(chuàng)建操作,在這里為所有和國(guó)家有關(guān)的數(shù)據(jù)新建一個(gè)控制器更加合理。新控制器名為?CountryController,并在其中創(chuàng)建一個(gè)?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)用了活動(dòng)記錄?Country::find()?方法,去生成查詢(xún)語(yǔ)句并從?country?表中取回所有數(shù)據(jù)。為了限定每個(gè)請(qǐng)求所返回的國(guó)家數(shù)量,查詢(xún)?cè)?yii\data\Pagination 對(duì)象的幫助下進(jìn)行分頁(yè)。?Pagination?對(duì)象的使命主要有兩點(diǎn):

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

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

創(chuàng)建視圖

在?views?目錄下先創(chuàng)建一個(gè)名為?country?的子目錄。這個(gè)目錄存儲(chǔ)所有由?country?控制器渲染的視圖。在?views/country?目錄下創(chuàng)建一個(gè)名為?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]) ?>

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

試運(yùn)行

瀏覽器訪(fǎng)問(wèn)下面的 URL 看看能否工作:

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

國(guó)家列表

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

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

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

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

總結(jié)

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

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