国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

打通Laravel和Yii2任督二脈

kohoh_ / 3213人閱讀

摘要:于是直接暴力開干,找說明書查詢。測試登錄,果然不通。一般情況下,這時候應該遵照官方手冊,開始建立自己相配套的數據庫體系。數據庫是連通了,出現了熟悉的錯誤找不到表。登入登出完全正常,終于可以和和和美美地住在一個小房子里了。

Yii2與Laravel相愛相殺已經很久了,導致廣大PHP愛好者必須選邊站隊,生怕自己站錯了陣營。作為一個已經上了Yii2賊船很久的人想換船是需要很大勇氣的,能不能就在現有框架基礎上嘗嘗Laravel的鮮,同時萬一不合適還能及時回頭是岸呢?無論如何我也要趟一趟這趟渾水,看看人們傳說已久慕名已久的Laravel到底有多好,是不是真的比Yii2要好很多?

安裝Laravel

安裝過程很簡單,照著說明書一步一步操作,只要執行

laravel new project_name

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

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

看來它是自帶有登錄注冊系統的,但是我沒有看到這個登錄注冊按鈕。于是直接暴力開干,找說明書查詢。書上有講:

php artisan make:auth

終于看到了登錄注冊按鈕。但是這時候肯定是連不通的,想也知道,我們還沒有配數據庫嘛。測試登錄,果然不通。

一般情況下,這時候應該遵照官方手冊,開始建立Laravel自己相配套的數據庫體系。但是,我們偏偏不要遵循官方教程,因為我們自己已經有了我們已經有Yii2做好的數據庫,為什么要另起爐灶呢?我們偏偏就要讓Laravel使用Yii2建好的數據庫,否則我那么多用戶數據怎么辦?就算我把Yii生成的user表里的數據導入Laravel自己建的數據庫,那我將來想兩邊都共用怎么辦?所以必須強制它們住在一個屋檐下!

配置Laravel數據庫

查看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把與環境相關的數據庫配置放在了/.env文件里,而.env文件是被.gitignore了的,完全等價于Yii2的config/main-local.php。明白了這個就好辦了,修改/.env文件:

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

刷新頁面,重新登錄。數據庫是連通了,出現了熟悉的錯誤:找不到users表。

讓Laravel使用Yii2的數據庫表

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

Laravel是把自己的model文件保存在app目錄下的,我們在這個目錄里可以找到一個文件叫做:/app/User.php。在這個文件里,我們來給它進行一點小小的改造,加上這么一行:

protected $table = "user";

我想你應該明白這是什么意思。于是乎,Laravel不再試圖去從它想找的users表里找用戶,而改從我們告訴它的user表里找用戶。但是,不要高興得太早,你依然是登錄不進去的,因為表雖然對了,但是列不一定對,因為我們的Yii2是把密碼哈希值存儲在password_hash列里,而Laravel缺省要找的是password列,所以我們還要通過User.php文件告訴Laravel請你從password_hash列里找密碼:

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

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

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

再試一下,你已經可以用你舊的Yii2用戶的密碼登錄Laravel系統了!

無法登出

問題總是一個接著一個,雖然可以登錄了,但是還是無法登出,登出會報一個錯誤,原因是因為上面那一列auth_key,Yii2在建表的時候,缺省給的是一個32位長的字符串,而Laravel需要更長。所以我們多少還是需要小動一下我們的數據庫結構,鑒于此,我們通過Yii2的migration來管理我們所有數據庫的修改:

./yii migrate create alter_user_authkey_column

Yii2系統會幫我們在/console/migrations下自動生成一個文件,我們只需要簡單修改一下就好了:

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是指向上升級的時候要做的動作,safeDown是指萬一失敗了回退時的動作。

因為我們數據庫中已經有user表了,所以我們不能再執行對于user表的migration動作,所以需要先告訴Yii2我們已經執行過user表的migration了,不要再執行:

./yii migrate/mark 130524_201442

好了,現在再執行./yii migrate就可以看到你想要的結果了。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22986.html

相關文章

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

    摘要:挺早就接觸了的布局,深入使用也就是在近期移動端開發。屬性用于設置或檢索彈性盒模型對象的子元素如何分配空間。所以,項目之間的間隔比項目與邊框的間隔大一倍。默認值是,也就是不進行縮放,占原來元素內容寬度大小。  挺早就接觸了css的flex布局,深入使用也就是在近期移動端開發。老來多健忘,只能自己梳理一下知識點,當做溫故知新吧。 ,請原諒小白的才疏學淺,寫的不到位的地方請指正。   flex屬性...

    Yumenokanata 評論0 收藏0
  • UCloud推出Rome全球網絡加速產品,實現全球多云互聯

    摘要:微軟雅黑宋體正如這款產品的名字一樣,相信條條大路通羅馬,羅馬全球網絡加速產品依托于全球數據中心,為用戶提供就近接入鏈路動態調度,能夠實現端到端的高穩定連接,規避網絡故障實現多云互聯,多云災備。我們已經身處數字經濟時代,數字經濟要發展,自然離不開產業政策的扶持,以及產業生態的做強。不過從技術的維度來看,應用層面的提速才是一系列外部條件推動數字經濟發展的有力支點。 不能承受的網絡之輕 ...

    Tecode 評論0 收藏0
  • 后端開發者從零做一個移動應用(一)

    摘要:最近終于痛定思痛,做了一個應用,目前的產品確實很一般,但決定以此為起步,逐步完善逐步提高。是以提供游戲下載游戲禮包發放為核心的移動端應用。可以簡單理解成一個游戲的應用市場。在寫后端的時候,產出了一個基于的授權的。 移動互聯網時代,我不想只當一個后端工程師,是時候學習一些新的東西了! 一直以來想要學習一些前端的知識,擴寬自己的技術棧,但是一直以來對前端都是進行了解,沒有用一個產品把這些東...

    galaxy_robot 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<