Yii2入門安裝與使用

安裝

composer

全局鏡像切換(阿里云 )

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

安裝composer-asset-plugin

composer global require "fxp/composer-asset-plugin"

安裝yii2

composer create-project --prefer-dist yiisoft/yii2-app-basic basic
composer update

應(yīng)用結(jié)構(gòu)

應(yīng)用中最重要的目錄和文件(假設(shè)應(yīng)用根目錄是 basic):

basic/                  應(yīng)用根目錄
    composer.json       Composer 配置文件, 描述包信息
    config/             包含應(yīng)用配置及其它配置
        console.php     控制臺(tái)應(yīng)用配置信息
        web.php         Web 應(yīng)用配置信息
    commands/           包含控制臺(tái)命令類
    controllers/        包含控制器類
    models/             包含模型類
    runtime/            包含 Yii 在運(yùn)行時(shí)生成的文件偎捎,例如日志和緩存文件
    vendor/             包含已經(jīng)安裝的 Composer 包率挣,包括 Yii 框架自身
    views/              包含視圖文件
    web/                Web 應(yīng)用根目錄胖眷,包含 Web 入口文件
        assets/         包含 Yii 發(fā)布的資源文件(javascript 和 css)
        index.php       應(yīng)用入口文件
    yii                 Yii 控制臺(tái)命令執(zhí)行腳本

請求生命周期

image-20201020101745506.png

使用

第一次問候

1鹃愤、動(dòng)作命名

在控制器中慌核,如果執(zhí)行一個(gè)操作(即方法) 绵载,action作為前綴+操作ID蛔翅。

一個(gè)操作 ID 由多個(gè)單詞組成门驾, 單詞之間將由連字符連接(如 create-comment)学搜。

操作 ID 映射為方法名時(shí)移除了連字符娃善,將每個(gè)單詞首字母大寫论衍,并加上 action 前綴。 例子:操作 ID create-comment 相當(dāng)于方法名 actionCreateComment聚磺。

2饲齐、創(chuàng)建視圖

當(dāng)一個(gè)操作中調(diào)用了 render() 方法時(shí), 它將會(huì)按 views/控制器 ID/視圖名.php 路徑加載 PHP 文件咧最。

  1. 如何創(chuàng)建一個(gè)動(dòng)作去響應(yīng)請求捂人,
  2. 如何創(chuàng)建一個(gè)視圖去構(gòu)造響應(yīng)內(nèi)容,
  3. 以及一個(gè)應(yīng)用如何分派請求給動(dòng)作矢沿。

url : http://localhost/?r=site/say&message=hello+world

  • 創(chuàng)建動(dòng)作
namespace app\controllers;

class SiteController  extends Controller
{
    public function actionSay($message='Hello')
    {
        return $this->render('say', ['message' => $message, 'age' => 10]);
    }    
}

  • 創(chuàng)建視圖views/site/say.php

參數(shù)在輸出之前被 HTML-encoded 方法處理過滥搭。

<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>

輸出:

image-20201021142858304.png

表單使用

目標(biāo)

  • 創(chuàng)建一個(gè)模型代表用戶通過表單輸入的數(shù)據(jù)
  • 聲明規(guī)則去驗(yàn)證輸入的數(shù)據(jù)
  • 視圖中生成一個(gè) HTML 表單

1、創(chuàng)建模型

<?php


namespace app\models;

use \yii\base\Model;

class EntryForm extends Model
{
    //模型的三個(gè)屬性捣鲸,需要和form表單的字段對應(yīng)
    public $email;
    public $name;
    public $age;

    /*
    *聲明規(guī)則來驗(yàn)證輸入的數(shù)據(jù)
    */
    public function rules()
    {
        return [
            [['email', 'name'], 'required'],//驗(yàn)證表單屬性必填
            ['email','email'],//郵箱必須符合格式
            ['age','number'],//年齡必須符合數(shù)字
        ];
    }
}

2瑟匆、創(chuàng)建動(dòng)作

namespace app\controllers;

class SiteController  extends Controller
{
    /**
     * @api {GET} index?r=Site/entry  02使用表單
     * @return string
     */
    public function actionEntry()
    {
        $model = new EntryForm();
        //實(shí)例化模型
        /**
        表達(dá)式 Yii::$app 代表應(yīng)用實(shí)例,它是一個(gè)全局可訪問的單例栽惶。 同時(shí)它也是一個(gè)服務(wù)定位器愁溜, 能提供 request,response外厂,db 等等特定功能的組件冕象。 在上面的代碼里就是使用 request 組件來訪問應(yīng)用實(shí)例收到的 $_POST 數(shù)據(jù)。
        **/
        
        //使用Yii 的request來采集表單數(shù)據(jù) 并且交給模型去驗(yàn)證
        if($model->load(Yii::$app->request->post()) && $model->validate())
        {
            //通過驗(yàn)證  將數(shù)據(jù)響應(yīng)給視圖entry-confirm
            //var_dump(Yii::$app->request->post());
            //todo...
            return $this->render('entry-confirm', ['model' => $model]);
        }else{
            //不通過驗(yàn)證則將 提示信息返回 給視圖entry
            return $this->render('entry', ['model' => $model]);
        }
    }
}

3汁蝶、視圖代碼

  • views/site/entry.php渐扮。
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<!--表單開始-->
<?php $form = ActiveForm::begin(); ?>

<!--姓名-->
<?= $form->field($model, 'name') ?>
<!--郵件-->
<?= $form->field($model, 'email') ?>

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

<!--提交按鈕-->
<div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>

<!--表單結(jié)束-->
<?php ActiveForm::end(); ?>
  • views/site/entry-confirm
<?php


namespace app\models;

use \yii\base\Model;

class EntryForm extends Model
{
    public $email;
    public $name;
    public $age;

    public function rules()
    {
        return [
            [['email', 'name'], 'required'],
            ['email','email'],
            ['age','number']
        ];
    }
}

視圖使用了一個(gè)功能強(qiáng)大的小部件 ActiveForm 去生成 HTML 表單。 其中的 begin()end() 分別用來渲染表單的開始和關(guān)閉標(biāo)簽掖棉。 在這兩個(gè)方法之間使用了 field() 方法去創(chuàng)建輸入框墓律。 第一個(gè)輸入框用于 “name”,第二個(gè)輸入框用于 “email”幔亥。 之后使用 yii\helpers\Html::submitButton() 方法生成提交按鈕耻讽。

效果1:

image-20201021154102583.png

效果2:

image-20201021154231648.png

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

目標(biāo):

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

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

config/db.php文件中有默認(rèn)配置

<?php

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

2帕棉、創(chuàng)建活動(dòng)記錄

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

<?php
namespace app\models;

class Country extends \yii\db\ActiveRecord
{

}

3祖驱、創(chuàng)建動(dòng)作查詢country數(shù)據(jù)

新開CountryController.php

<?php
namespace app\controllers;

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

class CountryController extends Controller
{

    public function actionIndex()
    {
        $query = Country::find();
        
        //這是一個(gè)分頁類,最終交給視圖中的LinkPager 來渲染分頁
        $pagination = new Pagination([
            'defaultPageSize' => 5,//默認(rèn)每頁5行
            'totalCount' => $query->count(),//數(shù)據(jù)總數(shù)
        ]);

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

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

4瞒窒、創(chuàng)建視圖

views/country/index.php

<?php

use 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]) ?>

效果:

image-20201021164657733.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乡洼,隨后出現(xiàn)的幾起案子崇裁,更是在濱河造成了極大的恐慌匕坯,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔稳,死亡現(xiàn)場離奇詭異葛峻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巴比,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門术奖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轻绞,你說我怎么就攤上這事采记。” “怎么了政勃?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵唧龄,是天一觀的道長。 經(jīng)常有香客問我奸远,道長既棺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任懒叛,我火速辦了婚禮丸冕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薛窥。我一直安慰自己晨仑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布拆檬。 她就那樣靜靜地躺著洪己,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竟贯。 梳的紋絲不亂的頭發(fā)上答捕,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音屑那,去河邊找鬼拱镐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛持际,可吹牛的內(nèi)容都是我干的沃琅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蜘欲,長吁一口氣:“原來是場噩夢啊……” “哼益眉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤郭脂,失蹤者是張志新(化名)和其女友劉穎年碘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體展鸡,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屿衅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莹弊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涤久。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忍弛,靈堂內(nèi)的尸體忽然破棺而出响迂,到底是詐尸還是另有隱情,我是刑警寧澤剧罩,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布栓拜,位于F島的核電站,受9級特大地震影響惠昔,放射性物質(zhì)發(fā)生泄漏幕与。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一镇防、第九天 我趴在偏房一處隱蔽的房頂上張望啦鸣。 院中可真熱鬧,春花似錦来氧、人聲如沸诫给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽中狂。三九已至,卻和暖如春扑毡,著一層夾襖步出監(jiān)牢的瞬間胃榕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工瞄摊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勋又,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓换帜,卻偏偏與公主長得像楔壤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子惯驼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359