一:安裝及Hello World

2018-02-24 15:58 更新

原文出處:https://jellybool.com/post/programming-with-yii2-getting-started-with-install-and-hello-world

嗯,今天起打算寫一個系列教程來過一遍Yii2,沒錯,我就是來安利大家使用Yii2的。至于最愛的Laravel,后面是打算會有教程的,只是不知道是系列博文還是直接錄視頻而已,因為Laravel貌似想講的東西實在是太多了。給Laravel發(fā)完金水之后,還是回到Yii2本身吧。

額,如果你還沒聽說過什么是Yii,可以直接看下面的鏈接:

http://www.yiiframework.com/

安裝Yii2

打算從頭開始,所以,連安裝Yii2也稍微寫一點吧。安裝Yii2最好的方式就是使用composer

composer global require "fxp/composer-asset-plugin:~1.0.3"

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

等待一小段時間之后(如果等太久或直接報錯,請使用VPN),在這兩步你應(yīng)該會看到類似下面的信息:

Updating dependencies (including require-dev)
  - Installing fxp/composer-asset-plugin (v1.0.3)
    Downloading: 100%

Writing lock file
Generating autoload files
> yii\composer\Installer::postCreateProject
chmod('runtime', 0777)...done.
chmod('web/assets', 0777)...done.
chmod('yii', 0755)...done.

這里的第一條命令跟官方文檔的有稍微的差別,官方文檔還是停留在fxp/composer-asset-plugin:~1.0.0,在我寫這篇文章的時候,最新版本為fxp/composer-asset-plugin:~1.0.3。所以這里會有一些些不一樣。

注,我直接將helloYii項目放在了桌面,你可以根據(jù)自己的喜好調(diào)整目錄

安裝完Yii2之后,進(jìn)入到項目的web/目錄:

cd helloYii/web

開啟PHP內(nèi)置服務(wù)器:

php -S localhost:8999

然后再瀏覽器輸入localhost:8999,你就可以看到下面的頁面了:

替代文字

這里需要說明的是:我是在mac下進(jìn)行的開發(fā),并且處于便捷的原因,我后續(xù)也會一直使用PHP內(nèi)置服務(wù)器,也就是說本教程的localhost:8999是我默認(rèn)的首頁地址。至于用MAMP for OS X的用戶,你可以直接配置MAMP

cd /Applications/MAMP/htdocs
ln -s ~/Desktop/helloYii/ /Applications/MAMP/htdocs/helloYii

然后你可以訪問這樣的地址:http://localhost:8888/helloYii/web,不出意外,你也可以看Yii默認(rèn)的可愛首頁了。

對于用Windows的同學(xué),我建議你們直接用WAMP,不過具體配置我倒是沒有實際操作過,所以不做任何評論。

關(guān)于Yii2

MVC的支持就基本不用多說了,之前發(fā)過一篇文章粗略地說過一遍。而在這里我想說明的是:在Yii2中,我們的單入口文件是web/index.php,所以剛剛在開啟PHP內(nèi)置服務(wù)器的時候需要來到這個目錄,不過如果你直接指定也是可以的。這個文件負(fù)責(zé)將Yii2項目所需要的東西全部加載完成之后,最后通過run方法來使得整個項目可以跑起來:

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

默認(rèn)的情況下,我們看到的Yii2首頁是/controllers/SiteController.php下的Index方法:

public function actionIndex()
    {
        return $this->render('index');
    }

通常情況下,控制器一般都會有比較多的方法來鏈接模型和視圖之間的橋梁,但是方法雖多,很多時候都只是一些簡單的代碼和邏輯,所以,不用擔(dān)心。

上面的Index方法渲染了index這個模版,而這個模板位于/views/site/index.php,至于控制器和視圖之間的命名規(guī)則,參考這里:

views/ControllerID/ViewName.php

ControllerID?: 表示控制器的ID,也就是控制器去掉Controller的前綴,比如SiteController就對應(yīng)site

ViewName?: 是對應(yīng)方法的名字,但是不包括action字眼,比如actionIndex對應(yīng)的是index.php

而在使用render方法來渲染視圖的時候,Yii2默認(rèn)地也會渲染載入/views/layouts/main.php這個文件,而這個文件做的事就是載入一些html頭部的共用文件,比如js,css,導(dǎo)航欄和底部繁榮導(dǎo)航欄等。這里其實我們最值得關(guān)心的其實就是下面這段代碼的<?= $content ?>

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

這個<?= $content ?>可以說就是我們之后定義視圖的內(nèi)容,我們后續(xù)創(chuàng)建的視圖文件會被讀成字符串的形式賦給$content,然后進(jìn)行渲染顯示。

Hello World

有了上面的安裝和基本知識之后,我們就可以自己動手來創(chuàng)建一個頁面了。不過在創(chuàng)建頁面之前,我們先來做一點簡單的配置:開啟Yii2的enablePrettyUrl模式,因為這樣對于后續(xù)的開發(fā)會便捷很多,而且開啟之后,我們的url也會變得很簡潔又好,不想現(xiàn)在這樣:

http://localhost:8999/index.php?r=site%2Fabout

這是我點擊首頁導(dǎo)航欄的About出現(xiàn)的url,一看到這個,我是拒絕的,所以來到/config/web.php這個配置文件中,找到'components' => []這個數(shù)組,加入下面的兩行代碼:

'urlManager' => [
            'showScriptName' => false,
            'enablePrettyUrl' => true
        ],

加入之后,正確的代碼配置是長成這個樣子的:

'components' => [
        'urlManager' => [
            'showScriptName' => false,
            'enablePrettyUrl' => true
        ],
        'request' => [

這樣開啟enablePrettyUrl模式之后,我們就可以通過http://localhost:8999/site/about來訪問我們的About頁面了,這里的規(guī)律是這樣的:

http://localhost:8999/ControllerID/ActionName

比如,我們在/controllers/SiteController.php創(chuàng)建一個Say操作方法:

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

我們要訪問這個方法的正確路徑就是http://localhost:8999/site/say?。

在Yii中使用action關(guān)鍵字前綴來區(qū)分用于url操作方法和其他方法,這里的actionSay接收一個參數(shù)$target,如果用戶在訪問的時候傳入target參數(shù),target就為用戶傳入的值,而如果用戶沒有傳入,我們將其默認(rèn)值設(shè)為World。有了控制器的方法,從$this->render('say', ['target' => $target])這行代碼來看,我們需要需要創(chuàng)建一個say.php模板文件,這個文件是在哪里的呢?

根據(jù)前面說的視圖模板規(guī)則,它應(yīng)該位于:/views/site/say.php。在里面簡單寫上下面這一小段代碼:

<?php
use yii\helpers\Html;
?>
<h1>Hello <?= Html::encode($target) ?></h1>
<p>Welcome to your Yii2 demonstration application.</p>

出于安全的因素考慮,我們在say.php這個模版文件中使用了yii\helpers\Html類來對用戶傳入的數(shù)據(jù)進(jìn)行過濾,所以我們才有了這樣的輸出:

<?= Html::encode($target) ?>

我們來訪問http://localhost:8999/site/say試試,不出意外這時你看到的是這樣的:

替代文字

然后我們再來訪問 : `http://localhost:8999/site/say?target=少年,還是用Yii吧

替代文字

雖然說在這里演示用中文不太和諧,但是沒辦法,我得安利一下各位少年,上手Yii2吧。

第一篇先寫到這里了吧,下一篇打算再說說Yii2MVC,Fomrs?和Layouts這幾個知識點。

Happy Hacking

源碼會放在Github:https://github.com/JellyBool/helloYii

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號