基於 Laravel + Vue 構建一個類似 Twitter 的 Web 應用

1.應用場景/目的

基於 Laravel + Vue 構建練習項目.

2.學習/操作

步驟暫參見: https://xueyuanjun.com/post/9488 

github: https://github.com/ningxiaofa/laratwitter

 

後續整理, 發出文檔.

TBD

 

 

過程截圖記錄:

.env  //很平常的配置

 

npm run watch  啓動熱編譯

 

 

保存數據,更新UI

 

 

 

 

使用用戶名字顯示個人主頁

 

 

關注功能[顯示鏈接]

 

'開始關注'實現

 

'取消關注'實現

 

獲取用戶自身與所關注用戶的所有的tweet

 

至此,一個基於 Laravel + Vue 實現的小型 Twitter 網站已經開發完成,你可以對其進行添磚加瓦,將其變成一個真正可用的在線產品.

 

Tips:

如果按照此教程在實踐過程中,發現前端組件調整後不生效,可以嘗試在每次更改後運行 npm run dev 手動編譯前端資源。

 

 

 

後續補充

...

3.問題/補充

1. npm run watch 熱編譯未生效

 

原因: TBD  肯能是鼠標在cmd中點擊,到時進程別中止, 應該重新啓動, 在cmd點擊,回車, 或者ctrl+終止, npm run watch 重新啓動[然後不要再管它].

處理辦法: 見上面.

 

後發現, 熱編譯有生效, 從文件修改日期可知

但是頁面上並不能自動更新, 需要手動刷新, 應該如何解決  //應該是瀏覽器緩存的問題, 如何解決緩存的問題. 

TBD

 

 

2. 使用axios發送post請求, 後端控制器中接收不到請求?

原因: TBD

解決辦法: 排查原因,步驟如下: 

先檢測前端是否能正常發送post請求. 先用斷點輸出方式定位.

後定位後端路由,在執行的路由中斷電調試, 確認是否能接收到請求.

主要查看url是否正確, 以及請求方式.
 

最後發現原因是: 後端路由web.php中加上/即可  //待確定, 加不加/的區別  TBD

Route::post('tweet/save', 'PostController@store');

 

重新輸入信息, 點擊'發送', 截圖如下:

 

 

3. 當定義事件時後, 點擊發送/tweet時, 期望能更新視圖, 但出現報錯

TypeError: Event.$emit is not a function

 

原因:  Event未定義. 

先創建event.js 後引入js [import Event from '../event.js';] 文件方式爲生效, 原因TBD 

 

在resources/assets/js/components/FormComponent.vue中引入,方式不work //而且是否推薦, TBD

解決辦法:

在app.js [resources/assets/js/app.js] 中加入如下代碼: 

window.Event = new Vue();如下:

並且將引入event.js的代碼註釋或刪除

再次推送消息, 界面更新.

4. IDE中顯示的問題, UI沒有更新, 是瀏覽器緩存的問題[請強制刷新, 這個問題稍後解決]

 

5. 補充

Laravel5.8以後 遷移表的約束必須是相同的數據類型,主鍵默認是bigInt類型,所以約束的外鍵也必須是bigInt類型

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->bigInteger('user_id')->unsigned();
            $table->string('body', 140);
            $table->timestamps();
            $table->foreign('user_id')->references('id')->on('users');
     
         });

    }

 

6. 查看其他用戶主頁, 出現報錯 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous...'

原因可知: sql語句的問題, id未指明是屬於哪個表.

 

7. 未登錄, 訪問 http://laratwitter.test/users/學院君, 出現報錯.

原因: 因爲調用User模型中的isNot()方法導致出錯, 未登錄時, $auth()->user()->isNot($user) 紅色部分返回值是null, 調用isNot()方法會報錯.

解決辦法: 

方式一: 添加中間件(auth)進行登錄認證過濾, 未登錄就直接跳轉到登錄界面. 

 

路由中使用中間件, 見下方截圖.

 

方式二: 添加判斷, 分爲兩種情況:登錄與未登錄, 主要是處理未登錄情況.

若未登錄, 則顯示'關注'. 若要關注, 需要登錄,然後跳轉到其他用戶主頁頁面.

具體[重新跳轉回其他用戶個人頁面]做法: TBD

 

 

補充:

Laravel中的Auth::routes爲什麼是這樣寫?

https://segmentfault.com/q/1010000012074248

簡單說:

如果使用laravel自帶註冊認證功能, 在web.php路由文件中直接寫Auth::routes; 即可

具體見下面兩個文件:

routes/web.php

vendor/laravel/framework/src/Illuminate/Routing/Router.php

Over

...

 

 

 

 

後續補充

...

4.參考

https://xueyuanjun.com/post/9488  //基於 Laravel + Vue 構建一個類似 Twitter 的 Web 應用

https://forum.vuejs.org/t/event-emit-is-not-a-function-when-trying-to-emit-within-a-component/6223  //解決報錯

https://blog.csdn.net/qq_23000373/article/details/81121533  //laravel 關聯關係

https://segmentfault.com/q/1010000012074248  //Laravel中的Auth::routes爲什麼是這樣寫?

https://www.cnblogs.com/M-D-Luffy/p/6899382.html  //laravel 登錄後跳轉原來瀏覽的頁面

後續補充

...

發佈了399 篇原創文章 · 獲贊 32 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章