Yii2快速總結

林堯彬發表於2020-04-04

1.專案目錄

後面的總結都是基於這個專案目錄,注意:這個Yii2框架的basic版本原始的目錄結構,未作任何更改。

2.新建控制器以及檢視

controllers這個目錄下的SiteController.php這是一個site控制器,我們在裡面新增一個action:

public function actionSay($message = 'Hello'){
        return $this->render('say',['message'=>$message]);
    } 

這個action名為say,預設引數$message的值為'Hello',然後我們再去views\site目錄下新建一個檢視頁面say.php:

<?php

/* @var $this yii\web\View */

use yii\helpers\Html;

?>
<div>
    <h1><?= Html::encode($message) ?></h1>

    <p>
        This is the Say page. You may modify the following file to customize its content:
    </p>

    <code><?= __FILE__ ?></code>
</div>

最後瀏覽器訪問:http://localhost/basic/web/index.php?r=site/say&message=Hello+world;

通過site控制器訪問名為say的action,傳進來引數,然後這個action跳轉(render)到say頁面,並且用類似於el表示式接收action傳來的值。

3.Models之ActiveRecord

models/Country.php(代表和讀取country資料表的資料,這個類裡面不需要寫什麼)

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Country extends ActiveRecord
{
}

controllers/CountryController(就和SiteController一樣是個控制器,裡面可以寫actionXXX)

<?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,
        ]);
    }
}

這個控制器的actionIndex呼叫models/Country類來進行Country表的全欄位查詢,然後轉到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]) ?>

最終頁面:

4.Gii生成程式碼

通常在config/web.php最後面,已經為該專案開啟了Gii模組,部分程式碼如下

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];
}

如果你通過本機以外的機器訪問 Gii,請求會被出於安全原因拒絕。 你可以配置 Gii 為其新增允許訪問的 IP 地址(allowdIPs)

然後瀏覽器輸入類如http://localhost/basic/web/index.php?r=gii,就可以看到Gii的介面了,你可以用chrome的翻譯工具將該頁面翻譯為中文 (T_T)。

now,開始學著去用它吧~~~

模型生成器:

這就和hibernate由資料表生成持久化類一個道理,操作簡便,輸入表名和對應生成的類名,然後Priview-->Generator就能在你的專案根目錄下的models目錄下生成類了。這裡拿country資料表作為例子,生成的類是models/Country.php。

CRUD生成器:

這就是一個資料庫的增刪改查,點選,然後填寫表單,

  • Model Class: app\models\Country
  • Search Model Class: app\models\CountrySearch
  • Controller Class: app\controllers\CountryController
  • View Path: @app/views/country

然後Priview-->Generator就能在你的專案裡生成n多的檔案了。

然後瀏覽器輸入:http://localhost/basic/web/index.php?r=country/index

5.

 

轉載於:https://www.cnblogs.com/eco-just/p/8717725.html