yii2的使用

通過(guò)歸檔文件安裝或者通過(guò)composer下載放在自己的項(xiàng)目中,接下來(lái)開(kāi)始使用yii2。

認(rèn)識(shí)yii2.0

  • 什么是yii框架?

快速,安全,專業(yè)的php框架。

  • yii框架有什么用?

非常適合開(kāi)發(fā)web2.0網(wǎng)站,博客,社區(qū)網(wǎng)站,sns,分享服務(wù),內(nèi)容管理系統(tǒng),電子商務(wù)網(wǎng)站,restful web服務(wù)這些應(yīng)用,yii框架都是不錯(cuò)的選擇。

  • 為什么要用yii框架

    • 開(kāi)發(fā)快

    yii框架自帶了豐富的功能,包括ActiveRecord,緩存,身份驗(yàn)證和RBAC,腳手架,單元測(cè)試這些功能,可顯著縮短開(kāi)發(fā)時(shí)間
    • 代碼優(yōu)雅

yii框架?chē)?yán)格按照MVC設(shè)計(jì)代碼,清晰分離邏輯層,代碼嚴(yán)謹(jǐn)優(yōu)雅,可維護(hù)性高

  • 安全可靠

yii框架的措施包括了輸入驗(yàn)證,輸入過(guò)濾,sql注入和跨站點(diǎn)腳本的預(yù)防。

yii2.0運(yùn)行原理初探

yii請(qǐng)求道響應(yīng)的生命周期

用戶通過(guò)入口腳本index.php,加載配置文件,啟動(dòng)應(yīng)用(application),解析路由,請(qǐng)求處理組件,創(chuàng)建控制器,創(chuàng)建動(dòng)作執(zhí)行過(guò)濾,通過(guò)模型(從數(shù)據(jù)庫(kù))加載數(shù)據(jù),通過(guò)視圖方法渲染視圖,響應(yīng)處理組件,響應(yīng)給用戶。

生命周期
  • 用戶向入口腳本 web/index.php
    發(fā)起請(qǐng)求。
  • 入口腳本加載應(yīng)用配置 并創(chuàng)建一個(gè)應(yīng)用實(shí)例去處理請(qǐng)求。
  • 應(yīng)用通過(guò)請(qǐng)求組件 解析請(qǐng)求的路由。
  • 應(yīng)用創(chuàng)建一個(gè)控制器實(shí)例去處理請(qǐng)求。
  • 控制器創(chuàng)建一個(gè)動(dòng)作實(shí)例并針對(duì)操作執(zhí)行過(guò)濾器。
  • 如果任何一個(gè)過(guò)濾器返回失敗,則動(dòng)作取消。
  • 如果所有過(guò)濾器都通過(guò),動(dòng)作將被執(zhí)行。
  • 動(dòng)作會(huì)加載一個(gè)數(shù)據(jù)模型,或許是來(lái)自數(shù)據(jù)庫(kù)。
  • 動(dòng)作會(huì)渲染一個(gè)視圖,把數(shù)據(jù)模型提供給它。
  • 渲染結(jié)果返回給響應(yīng)組件。
  • 響應(yīng)組件發(fā)送渲染結(jié)果給用戶瀏覽器。
    應(yīng)用主體
    1.應(yīng)用主體
  • 是管理Yii應(yīng)用系統(tǒng)整體結(jié)構(gòu)和生命周期的對(duì)象
  • 是yii\web\Application類(lèi)的實(shí)例
  • 可以用\Yii::$app來(lái)訪問(wèn)應(yīng)用

視圖

  • 視圖是mvc模式中view這一部分。
  • 視圖實(shí)在yii\web\view應(yīng)用組件的幫助下,依據(jù)視圖模板文件,進(jìn)行構(gòu)造和渲染完成的。
  • 習(xí)慣上稱視圖模板文件為視圖。
  • 視圖模板文件主要是通過(guò)html代碼和展示類(lèi)php代碼組成的。
  1. 視圖的布局layout

<?php

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

use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use frontend\assets\AppAsset;
use common\widgets\Alert;

AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?= Yii::$app->language ?>">
<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>

<div class="wrap">
    <?php
    NavBar::begin([
        'brandLabel' => 'My Company',
        'brandUrl' => Yii::$app->homeUrl,
        'options' => [
            'class' => 'navbar-inverse navbar-fixed-top',
        ],
    ]);
    $menuItems = [
        ['label' => 'Home', 'url' => ['/site/index']],
        ['label' => 'About', 'url' => ['/site/about']],
        ['label' => 'Contact', 'url' => ['/site/contact']],
    ];
    if (Yii::$app->user->isGuest) {
        $menuItems[] = ['label' => 'Signup', 'url' => ['/site/signup']];
        $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']];
    } else {
        $menuItems[] = '<li>'
            . Html::beginForm(['/site/logout'], 'post')
            . Html::submitButton(
                'Logout (' . Yii::$app->user->identity->username . ')',
                ['class' => 'btn btn-link']
            )
            . Html::endForm()
            . '</li>';
    }
    echo Nav::widget([
        'options' => ['class' => 'navbar-nav navbar-right'],
        'items' => $menuItems,
    ]);
    NavBar::end();
    ?>

    <div class="container">
        <?= Breadcrumbs::widget([
            'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
        ]) ?>
        <?= Alert::widget() ?>
        <?= $content ?>
    </div>
</div>

<footer class="footer">
    <div class="container">
        <p class="pull-left">? My Company <?= date('Y') ?></p>

        <p class="pull-right"><?= Yii::powered() ?></p>
    </div>
</footer>

<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>

1.什么是布局

布局是一種特殊的視圖,表現(xiàn)多個(gè)視圖的公共部分。

2.如何創(chuàng)建布局

布局也是視圖,它可像普通視圖一樣創(chuàng)建布局默認(rèn)存儲(chǔ)在@app/view/layouts里

3. 如何變換布局

  • 更改布局

$this->layout = 'wx';

  • 禁用布局

$this->layout = false;

4.布局文件的數(shù)據(jù)

$this 和 $content

  • $this指向 yii\web\view 來(lái)管理和渲染這個(gè)視圖文件。
  • $content是視圖模板文件渲染出來(lái)的結(jié)果

應(yīng)用主體

1.應(yīng)用主體

  • 是管理yii應(yīng)用系統(tǒng)整體結(jié)構(gòu)和生命周期的對(duì)象
  • 是yii\web\application類(lèi)的實(shí)例
  • 可以用\yii::$app來(lái)訪問(wèn)應(yīng)用

2.應(yīng)用主體的配置

  • $config變量給應(yīng)用主體這個(gè)對(duì)象的屬性進(jìn)行初始化賦值。
  • $config變量是從配置文件web.php加載而來(lái)的

3.應(yīng)用主體的屬性

  • id 用來(lái)區(qū)分其他應(yīng)用主體的標(biāo)識(shí)id
  • basePath 應(yīng)用根目錄
  • defaultRoute 默認(rèn)打開(kāi)的路由

表單

1.表單的創(chuàng)建

在yii 中主要是通過(guò) yii\widgets\ActiveForm 類(lèi)來(lái)創(chuàng)建表單。

  • ActiveForm::begin()不僅創(chuàng)建了一個(gè)表單實(shí)例,同時(shí)也標(biāo)志著表單的開(kāi)始。
  • 放在ActiveForm::begin() 與 ActiveForm::end()之間的所有內(nèi)容都被包裹在Html的<form>標(biāo)簽中。
<?php

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model \frontend\models\ContactForm */

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;

$this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-contact">
    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
    </p>

    <div class="row">
        <div class="col-lg-5">
            <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

                <?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?>

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

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

                <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>

                <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
                    'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
                ]) ?>

                <div class="form-group">
                    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
                </div>

            <?php ActiveForm::end(); ?>
        </div>
    </div>

</div>

2.ActiveField對(duì)象的使用

<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true])->hint('please enter your name')->label('Name') ?>
<?= $form->field($model, 'email')->input('email') ?>

3. 額外的標(biāo)簽處理

表單中,存在一些和模型對(duì)象沒(méi)有關(guān)系的,額外的HTML標(biāo)簽,比如submitButton我們可以:

  • 使用純HTML
  • 使用yii\helpers\Html 幫助類(lèi)中的方法來(lái)添加到表單中
 <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>

4. 塊賦值

input中的name,實(shí)際是以對(duì)象名來(lái)命名一個(gè)數(shù)組,數(shù)組的鍵對(duì)應(yīng)模型的屬性。

模型執(zhí)行l(wèi)oad方法,就是對(duì)每個(gè)屬性執(zhí)行這樣一句賦值。

$model->name = isset($ContactForm['name']) ? $contactForm['name'] : null;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評(píng)論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,427評(píng)論 4 61
  • 我是255號(hào)星寶寶糕點(diǎn)女王小楊,正在參加日記星球21天蛻變第六期第9天。今天的日記是一個(gè)迷失的故事。 有一個(gè)商人...
    糕點(diǎn)女王小楊閱讀 218評(píng)論 1 2
  • 一、Masonry介紹 之前我們?cè)谄聊贿m配的章節(jié)中學(xué)習(xí)過(guò)AutoLayout的使用,但那都是在可視化界面上進(jìn)行添加...
    無(wú)灃閱讀 2,267評(píng)論 0 1
  • 記|執(zhí)直之智 信徒之門(mén) 此門(mén)之內(nèi) 詩(shī)書(shū)天下 此門(mén)之外 仗劍天涯 每一段路 都是一種領(lǐng)悟 羌塘懷望 拉薩吉祥 華電所...
    執(zhí)直之智閱讀 361評(píng)論 11 12

友情鏈接更多精彩內(nèi)容