2021-05-12 14:32:11
Yii2 的安裝及簡單使用
前段時間第一次使用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);
相關文章