首頁 > 軟體

Yii2 的安裝及簡單使用

2020-06-16 16:35:40

前段時間第一次使用Yii2框架,碰到了一些問題,這裡記錄一下。

Yii2安裝:通過composer安裝

1、首先要安裝composer,我在另外一篇部落格中介紹了如何在Windows下安裝composer。

2、全域性設定 Composer 使用中國映象:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

3、安裝composer-asset-plugin(如果不安裝composer-asset-plugin後面安裝yii2時會出現問題,這裡預設安裝最新版)

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

4、(1)安裝基礎版,projectName是自己的專案名。

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

(2)安裝高階版。(高階版區分了前後台目錄backend,frontend)

composer create-project --prefer-dist yiisoft/yii2-app-advanced projectName

註:高階版安裝後需要初始化,雙擊根目錄下的"init.bat"檔案,選擇"0"(表示開發環境),之後選擇"yes"就可以了,會自動生成入口檔案。

5、設定域名資訊就可以存取了。(高階版需要分別設定前後台域名)

可能出現的問題:

安裝下來後可能會出現的問題:找不到vendor資料夾。

原因:composer-asset-plugin沒有安裝或者版本太低

解決辦法:找到檔案的根目錄,即composer.json檔案目錄,開啟命令列執行:composer update

Yii 2的簡單使用:

1、路由優化

找到 /frontend/config/main.php 檔案,找到以下程式碼,去掉註釋,執行後發現可以去掉"?r="使用"/"代替,但是還是不能去掉index.php。

'urlManager' => [
    'enablePrettyUrl' => true,  // 美化url去掉 ?r=
    'showScriptName' => false,  // 隱藏index.php
    'rules' => [
    ],
],

要去掉index.php,還需要在入口檔案下新增.htaccess檔案,檔案內容如下:

# use mod_rewrite for pretty URL support
RewriteEngine on
# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward the request to index.php
RewriteRule . index.php

註:這個需要前後端都設定一遍。

2、駝峰命名路徑存取

在yii2中如果使用駝峰命名,則預設使用"-",如要存取UserAdminController控制器下的actionTestUser方法,則存取路徑為:/user-admin/test-user

3、使用post方法存取

在Yii2中如果不做處理,使用post存取會報錯。這是因為Yii2使用post請求時預設會使用CSRF驗證。

這裡可以在表單中加入驗證或者後台可以取消掉CSRF驗證。

方法一:在表單中加入驗證:(如果能使用這種方法最好)

<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>" />

方法二:全域性設定,在組態檔中加入 'enableCsrfValidation' => false

在config資料夾下找到"components"設定下的"request"設定,在裡面加入'enableCsrfValidation' => false表示取消掉CSRF驗證。

方法三:區域性設定,在單個控制器下設定

可以在單個控制器下新增程式碼:

public $enableCsrfValidation = false;

這樣在這個控制器下的方法就可以使用post請求了。

Yii2處理密碼加密及驗證

在Yii2中提供了密碼加密以及驗證的一系列方法,方便我們的使用,它使用的是bcrypt演算法。檢視原始碼我們可以發現它使用的是PHP函數password_hash()和crypt()生成。

加密:

/**
 * $password  要加密的密碼
 * $hash    加密後的hash字串
 */
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);

驗證密碼:

/**
 * $password  要驗證的明文密碼
 * $hash    加密後的hash字串
 */
Yii::$app->getSecurity()->validatePassword($password, $hash);


IT145.com E-mail:sddin#qq.com