成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

打通Laravel和Yii2任督二脈

kohoh_ / 3223人閱讀

摘要:于是直接暴力開(kāi)干,找說(shuō)明書(shū)查詢(xún)。測(cè)試登錄,果然不通。一般情況下,這時(shí)候應(yīng)該遵照官方手冊(cè),開(kāi)始建立自己相配套的數(shù)據(jù)庫(kù)體系。數(shù)據(jù)庫(kù)是連通了,出現(xiàn)了熟悉的錯(cuò)誤找不到表。登入登出完全正常,終于可以和和和美美地住在一個(gè)小房子里了。

Yii2與Laravel相愛(ài)相殺已經(jīng)很久了,導(dǎo)致廣大PHP愛(ài)好者必須選邊站隊(duì),生怕自己站錯(cuò)了陣營(yíng)。作為一個(gè)已經(jīng)上了Yii2賊船很久的人想換船是需要很大勇氣的,能不能就在現(xiàn)有框架基礎(chǔ)上嘗嘗Laravel的鮮,同時(shí)萬(wàn)一不合適還能及時(shí)回頭是岸呢?無(wú)論如何我也要趟一趟這趟渾水,看看人們傳說(shuō)已久慕名已久的Laravel到底有多好,是不是真的比Yii2要好很多?

安裝Laravel

安裝過(guò)程很簡(jiǎn)單,照著說(shuō)明書(shū)一步一步操作,只要執(zhí)行

laravel new project_name

就很快建立了你的第一個(gè)Laravel項(xiàng)目。配好Apache,打開(kāi)瀏覽器,你已經(jīng)能看到第一個(gè)頁(yè)面。作為職業(yè)PHP選手,第一件事情就是要看看這個(gè)頁(yè)面是從哪里來(lái)的,答案很明顯,就在/resources/views/welcome.blade.php當(dāng)中,先不要管它這個(gè)blade是個(gè)什么鬼,其中的一段話吸引了我:

        @if (Route::has("login"))
            
        @endif

看來(lái)它是自帶有登錄注冊(cè)系統(tǒng)的,但是我沒(méi)有看到這個(gè)登錄注冊(cè)按鈕。于是直接暴力開(kāi)干,找說(shuō)明書(shū)查詢(xún)。書(shū)上有講:

php artisan make:auth

終于看到了登錄注冊(cè)按鈕。但是這時(shí)候肯定是連不通的,想也知道,我們還沒(méi)有配數(shù)據(jù)庫(kù)嘛。測(cè)試登錄,果然不通。

一般情況下,這時(shí)候應(yīng)該遵照官方手冊(cè),開(kāi)始建立Laravel自己相配套的數(shù)據(jù)庫(kù)體系。但是,我們偏偏不要遵循官方教程,因?yàn)槲覀冏约阂呀?jīng)有了我們已經(jīng)有Yii2做好的數(shù)據(jù)庫(kù),為什么要另起爐灶呢?我們偏偏就要讓Laravel使用Yii2建好的數(shù)據(jù)庫(kù),否則我那么多用戶(hù)數(shù)據(jù)怎么辦?就算我把Yii生成的user表里的數(shù)據(jù)導(dǎo)入Laravel自己建的數(shù)據(jù)庫(kù),那我將來(lái)想兩邊都共用怎么辦?所以必須強(qiáng)制它們住在一個(gè)屋檐下!

配置Laravel數(shù)據(jù)庫(kù)

查看Laravel代碼,/config/database.php,其中有如下配置:

"mysql" => [
    "driver" => "mysql",
    "host" => env("DB_HOST", "127.0.0.1"),
    "port" => env("DB_PORT", "3306"),
    "database" => env("DB_DATABASE", "forge"),
    "username" => env("DB_USERNAME", "forge"),
    "password" => env("DB_PASSWORD", ""),
    "unix_socket" => env("DB_SOCKET", ""),
    "charset" => "utf8mb4",
    "collation" => "utf8mb4_unicode_ci",
    "prefix" => "",
    "strict" => true,
    "engine" => null,
],

但是直接更改這里是行不通的,很聰明,這跟我們Yii2里的config/main.php是異曲同工之妙,Laravel把與環(huán)境相關(guān)的數(shù)據(jù)庫(kù)配置放在了/.env文件里,而.env文件是被.gitignore了的,完全等價(jià)于Yii2的config/main-local.php。明白了這個(gè)就好辦了,修改/.env文件:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydatabase
DB_USERNAME=root
DB_PASSWORD=

刷新頁(yè)面,重新登錄。數(shù)據(jù)庫(kù)是連通了,出現(xiàn)了熟悉的錯(cuò)誤:找不到users表。

讓Laravel使用Yii2的數(shù)據(jù)庫(kù)表

這是因?yàn)閅ii2自己建立的用戶(hù)表名字叫user,而Laravel想找的表是users,差一個(gè)字母。那我們是不是要把表名改成users或者再給它新建一個(gè)users表呢?No, no, no。那樣就失去了我們今天課程的精髓,我們偏偏就要讓Laravel來(lái)使用Yii2的user表。

Laravel是把自己的model文件保存在app目錄下的,我們?cè)谶@個(gè)目錄里可以找到一個(gè)文件叫做:/app/User.php。在這個(gè)文件里,我們來(lái)給它進(jìn)行一點(diǎn)小小的改造,加上這么一行:

protected $table = "user";

我想你應(yīng)該明白這是什么意思。于是乎,Laravel不再試圖去從它想找的users表里找用戶(hù),而改從我們告訴它的user表里找用戶(hù)。但是,不要高興得太早,你依然是登錄不進(jìn)去的,因?yàn)楸黼m然對(duì)了,但是列不一定對(duì),因?yàn)槲覀兊腨ii2是把密碼哈希值存儲(chǔ)在password_hash列里,而Laravel缺省要找的是password列,所以我們還要通過(guò)User.php文件告訴Laravel請(qǐng)你從password_hash列里找密碼:

public function getAuthPassword()
{
    return $this->password_hash;
}

不止如此,Laravel選擇當(dāng)用戶(hù)記住密碼時(shí)保存token的列叫作remember_token,而Yii2叫作auth_key,這兩者也不一樣,于是你還需要再加上:

public function getRememberTokenName()
{
    return "auth_key";
}

再試一下,你已經(jīng)可以用你舊的Yii2用戶(hù)的密碼登錄Laravel系統(tǒng)了!

無(wú)法登出

問(wèn)題總是一個(gè)接著一個(gè),雖然可以登錄了,但是還是無(wú)法登出,登出會(huì)報(bào)一個(gè)錯(cuò)誤,原因是因?yàn)樯厦婺且涣?b>auth_key,Yii2在建表的時(shí)候,缺省給的是一個(gè)32位長(zhǎng)的字符串,而Laravel需要更長(zhǎng)。所以我們多少還是需要小動(dòng)一下我們的數(shù)據(jù)庫(kù)結(jié)構(gòu),鑒于此,我們通過(guò)Yii2的migration來(lái)管理我們所有數(shù)據(jù)庫(kù)的修改:

./yii migrate create alter_user_authkey_column

Yii2系統(tǒng)會(huì)幫我們?cè)?console/migrations下自動(dòng)生成一個(gè)文件,我們只需要簡(jiǎn)單修改一下就好了:

use yiidbSchema;
use yiidbMigration;

class m170523_060237_alter_auth_key_column_from_user_table extends Migration
{
    public function safeUp()
    {
        $this->alterColumn("user", "auth_key", Schema::TYPE_STRING . "(100) NOT NULL");
    }

    public function safeDown()
    {
        $this->alterColumn("user", "auth_key", Schema::TYPE_STRING . "(32) NOT NULL");

        return false;
    }
}

safeUp是指向上升級(jí)的時(shí)候要做的動(dòng)作,safeDown是指萬(wàn)一失敗了回退時(shí)的動(dòng)作。

因?yàn)槲覀償?shù)據(jù)庫(kù)中已經(jīng)有user表了,所以我們不能再執(zhí)行對(duì)于user表的migration動(dòng)作,所以需要先告訴Yii2我們已經(jīng)執(zhí)行過(guò)user表的migration了,不要再執(zhí)行:

./yii migrate/mark 130524_201442

好了,現(xiàn)在再執(zhí)行./yii migrate就可以看到你想要的結(jié)果了。

登入登出完全正常,Laravel終于可以和Yii2和和美美地住在一個(gè)小房子里了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22986.html

相關(guān)文章

  • css3 flex彈性盒子布局梳理,打通任督二脈

    摘要:挺早就接觸了的布局,深入使用也就是在近期移動(dòng)端開(kāi)發(fā)。屬性用于設(shè)置或檢索彈性盒模型對(duì)象的子元素如何分配空間。所以,項(xiàng)目之間的間隔比項(xiàng)目與邊框的間隔大一倍。默認(rèn)值是,也就是不進(jìn)行縮放,占原來(lái)元素內(nèi)容寬度大小?! ⊥υ缇徒佑|了css的flex布局,深入使用也就是在近期移動(dòng)端開(kāi)發(fā)。老來(lái)多健忘,只能自己梳理一下知識(shí)點(diǎn),當(dāng)做溫故知新吧。 ,請(qǐng)?jiān)徯“椎牟攀鑼W(xué)淺,寫(xiě)的不到位的地方請(qǐng)指正。   flex屬性...

    Yumenokanata 評(píng)論0 收藏0
  • UCloud推出Rome全球網(wǎng)絡(luò)加速產(chǎn)品,實(shí)現(xiàn)全球多云互聯(lián)

    摘要:微軟雅黑宋體正如這款產(chǎn)品的名字一樣,相信條條大路通羅馬,羅馬全球網(wǎng)絡(luò)加速產(chǎn)品依托于全球數(shù)據(jù)中心,為用戶(hù)提供就近接入鏈路動(dòng)態(tài)調(diào)度,能夠?qū)崿F(xiàn)端到端的高穩(wěn)定連接,規(guī)避網(wǎng)絡(luò)故障實(shí)現(xiàn)多云互聯(lián),多云災(zāi)備。我們已經(jīng)身處數(shù)字經(jīng)濟(jì)時(shí)代,數(shù)字經(jīng)濟(jì)要發(fā)展,自然離不開(kāi)產(chǎn)業(yè)政策的扶持,以及產(chǎn)業(yè)生態(tài)的做強(qiáng)。不過(guò)從技術(shù)的維度來(lái)看,應(yīng)用層面的提速才是一系列外部條件推動(dòng)數(shù)字經(jīng)濟(jì)發(fā)展的有力支點(diǎn)。 不能承受的網(wǎng)絡(luò)之輕 ...

    Tecode 評(píng)論0 收藏0
  • 后端開(kāi)發(fā)者從零做一個(gè)移動(dòng)應(yīng)用(一)

    摘要:最近終于痛定思痛,做了一個(gè)應(yīng)用,目前的產(chǎn)品確實(shí)很一般,但決定以此為起步,逐步完善逐步提高。是以提供游戲下載游戲禮包發(fā)放為核心的移動(dòng)端應(yīng)用。可以簡(jiǎn)單理解成一個(gè)游戲的應(yīng)用市場(chǎng)。在寫(xiě)后端的時(shí)候,產(chǎn)出了一個(gè)基于的授權(quán)的。 移動(dòng)互聯(lián)網(wǎng)時(shí)代,我不想只當(dāng)一個(gè)后端工程師,是時(shí)候?qū)W習(xí)一些新的東西了! 一直以來(lái)想要學(xué)習(xí)一些前端的知識(shí),擴(kuò)寬自己的技術(shù)棧,但是一直以來(lái)對(duì)前端都是進(jìn)行了解,沒(méi)有用一個(gè)產(chǎn)品把這些東...

    galaxy_robot 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<