前面已經將Yii2下載下來了,那我們就需要能實際的使用。
一、初始化,因為我都是在windows系統下,所以用cmd命令打開下載下來的Yii2的根目錄。然後運行下面命令:
init
會提示選擇0為開發環境,1為生成環境。一般選生產環境。後期可以同樣輸入此命令來切換開發環境和生產環節,但是需要注意切換時需要提前在“environments”目錄中中提前寫好生產環境的配置,以免切換時覆蓋丟失配置項,後面還會說,現在繼續往下走。
二、配置數據庫,現在前台訪問地址為:http://localhost/vishun/backend/web/index.php,後台訪問地址為:http://localhost/vishun/frontend/web/index.php,其中vishun是我Yii框架安裝的目錄名稱。現在訪問時會報數據庫連接的錯誤,因為數據庫沒有連接上,所以,我們需要先創建一個數據庫(個人比較喜歡用phpmyadmin),然後在Yii2中配置數據庫參數:
配置文件在三個地方存在,common/config,frontend/config,backend/config,一般來說common是放前後台都會用到的配置文件,而frontend和backend則是放各自的配置文件,如果重復,則前後台的會覆蓋公用的。
每個文件夾下又分為main.php和main-local.php,這主要是為了團隊協作,一般團隊成員都在自己的電腦環境下開發,然後提交到git或svn上。所以團隊成員用自己的數據庫賬號密碼什麼的,如果提交上去,其它團隊成員更新下來和自己的賬號密碼不對,就會產生錯誤,所以數據庫等配置文件放在*-local文件中,提交時*-local的文件不提交。
但是如果不提交還是會有問題,像是一個新成員加入,直接從git上下載代碼下來,但是數據庫配置文件由於所有人都沒有提交,整個程序不完整,那就導致新成員根本就沒有數據庫的配置。所以這裡還需要用到上方提到過的environments目錄,這裡面有dev(開發)和prod(生產)兩種環境,主要是存儲*-local文件的模板。在使用init命令時,就會根據這裡面的文件來生成*-local文件,然後新成員在文件中填上自己的數據庫賬號密碼就可以使用了。
以上團隊環境詳細說明可以看這裡:深入理解Yii2.0--環境和配置文件,說的非常詳細。
三、配置完成後就可以,還是會報錯,但不是報數據鏈接的錯誤了,而是user表沒有找到。那我們就創建user表。Yii2高級版框架中user表已經寫好了,可以打開console/migrations下有*_init.php文件,這個就是寫好的user表。只需在cmd中Yii2根目錄下運行命令:
yii migrate
這樣user表就創建好了。這時訪問前後台都OK了。migrate命令是Yii框架遷移或者修改數據庫的工具,尤其的在團隊協作中,如果成員在本地電腦上增加了一張表,如何告知其它成員呢,用yii migrate/create命令就可在console/migrations創建一個改動,然後就增加的表內容寫在裡面,提交後其它成員更新後,用yii migrate命令,即可將自己的數據庫同步到最新的,絕對是十分方便。migrate功能還很多,自己也沒完全弄清楚呢,可能在下面的前後台分離章節中還會說。
四、順便說下配置郵箱吧。完成前三步功能時,就可以注冊個會員看看,當忘記密碼時,則在登錄界面點擊忘記密碼,需要通過郵件來找回,所以我們需要配置下郵箱:
Yii2高級版框架中是集成了郵箱類的,在common/config/main-local.php文件可以看到:
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', ],
這就是相關的配置文件,之所以放到*-local文件中,因為包含個人賬號的敏感信息。
上面的配置信息是不全的,需要填寫發件郵箱,端口號什麼的,所以修改上面為:
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.163.com', //我這裡用163郵箱 'username' => '你的郵箱名', 'password' => '你的郵箱密碼', 'port' => '25', 'encryption' => 'tls', ],
//'messageConfig'=>[
// 'charset'=>'UTF-8',
// 'from'=>['你的郵箱名'=>'robot']
//],
],
而發送郵件的整個流程方法在Yii2高級版中都寫好了,所以只需要配置就能發送了。
配置完上方後,可能找回密碼發送郵件是應該還會報錯,類似這種:
Expected response code 250 but got code "553", with message "553 Mail from must equal authorized user
這是因為有些郵件服務器要求from和username必須一直,例如網易的服務器,而在frontend/models/PasswordResetRequestForm.php中的sendEmail方法規定在63行左右,
->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot'])
From是取得supportEmail參數,這個參數在common/config/params.php中定義了默認為:[email protected],配置文件中的郵箱名和這個不符合所以報錯。方法一是把這個參數改成‘你的郵箱名’就可以正常發送了;方法二是將上方配置文件messageConfig
注釋的取消,然後->setFrom這行刪除掉。(所有的這些首先確保先開通smtp服務)
順便說下,因為你郵箱配置實在*-local文件中,所以為了其它成員也都能用你這個配置,應該在environments/dev/common/main-local.php中添加:
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => '', //空著,讓其他人自己填寫 'username' => '', 'password' => '', 'port' => '', 'encryption' => 'tls', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>[''=>'robot'] ], ],
這樣,其他人只需要填上自己的郵箱賬號就可以發送郵件了。
很多時候郵件填寫都是從數據庫獲取的,這時候就不應該在配置文件中了,而是應該單獨寫個類,(類似新建components文件並引入,寫在這裡面),順便封裝下發送方法。我自己也沒實習過,只是思路而已。
以上就是Yii2高級版的初始化,下節可能記錄下如何套用好看的後台界面和gii自定義模板什麼的。睡覺了先。