在线免费观看麻豆_国产+日韩+欧美_欧美色插_国产无限免费av在线播放_夜色阁亚洲一区二区三区_亚洲男女羞羞无遮挡久久丫

Laravel + Vue 使用示例系列:構建一個類似 Twitter 的 Web 應用
  • 更新時間:2025-05-04 12:01:04
  • 分享
  • 發布時間:7年前
  • 9231

在這一篇示例教程中,我們將會構建一個類似 Twitter 的 Web 應用。我們將使用到 Laravel 5.6 和 Vue.js,并且在 Vue.js 中定義一些組件,此外,還會使用 Axios 來發送網絡請求。當然,篇幅有限,我們不可能開發一個完整的 Twitter 應用,而是實現一個簡化版:用戶可以發送 Tweet 并在自己的時間線中看到,可以關注或取消關注其他用戶,如果關注了其他用戶,那么也可以看到關注用戶發布的 Tweet。麻雀雖小,五臟俱全,希望大家可以通過這個簡單的應用學會 Laravel 和 Vue.js 的基礎用法。

注:這是一篇翻譯文章,你可以將 Twitter 對標國內新浪微博,一條 Tweet 就是一條微博信息。

安裝配置 Laravel

首先,我們需要安裝一個新的 Laravel 應用(也可以通過 Composer 安裝,看個人喜好):

laravel?new?laratwitter

進入該項目根目錄,安裝前端依賴:

npm?install

接下來,修改?.env?中數據庫相關配置符合本地環境,然后通過如下命令生成用戶認證腳手架代碼:

php?artisan?make:auth

運行如下命令生成相關數據表:

php?artisan?migrate

接下來配置下 Web 服務器(使用 Valet 的話略過),我這里配置的域名是?laratwitter.test,配置完成后重啟下 Web 服務器,然后通過?http://laratwitter.test/register?注冊一個新用戶:

用戶注冊

接下來編輯?resoureces >> views >> home.blade.php?文件:

@extends('layouts.app')

@section('content')
<div?class="container">
????<div?class="row?justify-content-center">
????????<div?class="col-md-4">
????????????Tweet?表單
????????</div>
????????<div?class="col-md-8">
???????????時間線
????????</div>
????</div>
</div>
@endsection

新注冊用戶登錄后就能在新的 Home 頁看到變更后的效果了。

創建一個 Tweet 表單

我們使用 Vue.js 來完成表單創建,首先到?resources >> assets >> js >> components?目錄下新增一個?FormComponent.vue?文件:

//?FormComponent.vue

<template>
????<div?class="col-md-4">
????????<form>
????????????<div?class="form-group">
????????????????<textarea?
????????????????????class="form-control"?
????????????????????rows="8"?cols="8"?
????????????????????maxlength="130"?
????????????????????required>
????????????????</textarea>
????????????</div>
????????????<div?class="form-group">
????????????????<button?class="btn?btn-primary">
????????????????????發送
????????????????</button>
????????????</div>
????????</form>????????
????</div>
</template>
<script>
export?default?{

}
</script>

然后在?resources >> assets >> js >> app.js?中導入這個組件:

//?app.js

require('./bootstrap');

window.Vue?=?require('vue');

Vue.component('form-component',?require('./components/FormComponent.vue'));

const?app?=?new?Vue({
????el:?'#app'
});

最后在?home.blade.php?中使用這個組件:

@extends('layouts.app')

@section('content')
<div?class="container">
????<div?class="row?justify-content-center">
???????<form-component></form-component>
????????<div?class="col-md-8">
????????????TimeLines
????????</div>
????</div>
</div>
@endsection

為了監聽前端資源變動,可以在項目根目錄下運行如下命令監聽前端資源變動并實時編譯:

npm?run?watch

這樣,刷新?http://laratwitter.test/home?頁面就可以看到變更后的效果了:

用戶主頁

創建 Post 模型類及對應數據庫遷移文件

下面我們來實現表單提交保存操作,首先創建一個模型類及對應數據庫遷移文件:

php?artisan?make:model?Post?-m

編寫剛生成的數據庫遷移文件?create_posts_table.php

//?create_posts_table

public?function?up()
{
???Schema::create('posts',?function?(Blueprint?$table)?{
???????$table->increments('id');
???????$table->integer('user_id')->unsigned();
???????$table->string('body',?140);
???????$table->timestamps();

???????$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
????});
}

運行數據庫遷移命令:

php?artisan?migrate

現在可以在數據庫中看到剛創建的?posts?數據表了。

接下來創建控制器?PostController

php?artisan?make:controller?PostController

定義關聯關系

在?User?模型類中,我們需要定義一個關聯方法建立?Post?模型和?User?模型之間的關聯關系(一對多):

public?function?posts()
{
???return?$this->hasMany(Post::class);
}

相應地,在?Post?模型類中,也要定義與?User?模型的關聯關系:

public?function?user()
{
???return?$this->belongsTo(User::class);
}

在數據庫中保存 Tweet

前面提到我們將通過?axios?庫來發送 POST 請求到 Laravel 后端服務器,這個庫在我們運行?npm install?命令的時候已經安裝好了,在開始處理請求發送與處理之前,我們先來定義請求路由,在?routes >> web.php?文件中新增一個路由定義如下:

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

此外,還需要定義?Post?模型類的?$fillable?屬性來避免批量賦值異常:

protected?$fillable?=?['user_id',?'body'];

最后要做的準備工作就是到?PostController.php?中定義?store?方法:

public?function?store(Request?$request,?Post?$post)
{
????$newPost?=?$request->user()->posts()->create([
????????'body'?=>?$request->get('body')
????]);

????return?response()->json($post->with('user')->find($newPost->id));
}

我們使用了關聯關系來保存 Post 數據,它會自動將當前登錄用戶的?id?作為保存 Post 的?user_id?字段。

后端邏輯實現之后,接下來需要使用?axios?庫類發送 POST 請求,我們將相應邏輯寫到?FormComponent.vue?組件中:

//?FormComponent.vue

<template>
????<div?class="col-md-4">
????????<[email protected]="saveTweet">
????????????<div?class="form-group">
????????????????<textarea?
????????????????????class="form-control"?
????????????????????rows="8"?cols="8"?
????????????????????maxlength="130"
????????????????????v-model="body"
????????????????????required>
????????????????</textarea>
????????????</div>
????????????<div?class="form-group">
????????????????<button?class="btn?btn-primary">
????????????????????Tweet
????????????????</button>
????????????</div>
????????</form>????????
????</div>
</template>
<script>
export?default?{
????data()?{
????????return?{
????????????body:?''
????????}
????},
????methods:?{
????????saveTweet()?{
????????????axios.post('/tweet/save',?{body:?this.body}).then(res?=>?{
????????????????console.log(res.data);
????????????}).catch(e?=>?{
????????????????console.log(e);
????????????});

????????}
????}
}
</script>

CSRF_TOKEN?會默認包含到每個 POST 請求,所以不必手動添加。現在,如果一切正常工作的話,你就可以成功保存 Post 數據并在響應中獲取到 Post 對象及其關聯用戶:

發送Tweet

創建一個 Vue 事件

要想在前端顯示所有 Tweet,首先需要將它們顯示到時間線中,為此,我們需要創建一個事件。注意,這里不是要通過刷新頁面來獲取所有 Tweet,而是當我們添加一條新的 Tweet 時,在不刷新頁面的情況下在用戶時間線中顯示這條 Tweet。

為了實現這個功能,需要創建一個事件并觸發這個事件,我們通過時間線組件來監聽事件觸發并基于該事件更新 UI。可以通過?Vuex?來實現該功能,但是現在,我們不想要深入存儲和動作,只想將事情保持簡單。

在?resources >> assets >> js?目錄下創建一個名為?event.js?的文件,并編寫代碼如下:

//?event.js

import?Vue?from?'vue';
export?default?new?Vue();

然后將該文件導入?FormComponent.vue

//?FormComponent.vue

<template>
????<div?class="col-md-4">
????????<[email protected]="saveTweet">
????????????<div?class="form-group">
????????????????<textarea?
????????????????????class="form-control"?
????????????????????rows="8"?cols="8"?
????????????????????maxlength="130"
????????????????????v-model="body"
????????????????????required>
????????????????</textarea>
????????????</div>
????????????<div?class="form-group">
????????????????<button?class="btn?btn-primary">
????????????????????Tweet
????????????????</button>
????????????</div>
????????</form>????????
????</div>
</template>
<script>
import?Event?from?'../event.js';
export?default?{
????data()?{
????????return?{
????????????body:?'',
????????????postData:?{}
????????}
????},
????methods:?{
????????saveTweet()?{
????????????axios.post('/tweet/save',?{body:?this.body}).then(res?=>?{
????????????????this.postData?=?res.data;
????????????????Event.$emit('added_tweet',?this.postData);
????????????}).catch(e?=>?{
????????????????console.log(e);
????????????});
????????????this.body?=?'';
????????}
????}
}
</script>

這樣,當新提交數據被保存后,就可以觸發包含保存的 Tweet 和用戶信息的事件,監聽該事件的監聽器就可以捕獲數據并更新 UI。

創建時間線組件

接下來,我們來定義監聽 Tweet 發送成功事件的監聽器。

在?resources >> assets >> js >> components?目錄下新增一個?TimelineComponent.vue?組件,編寫該組件代碼如下:

//?TimelineComponent.vue

<template>
????<div?class="col-md-8?posts">
????????<p?v-if="!posts.length">No?posts</p>
????????<div?class="media"?v-for="post?in?posts"?:key="post.id">
????????????<img?class="mr-3"?/>
????????????<div?class="media-body">
????????????????<div?class="mt-3">
????????????????????<a?href="#">{{?post.user.name?}}</a>
????????????????</div>
????????????????<p>{{?post.body?}}</p>
????????????</div>
????????</div>
????</div>
</template>
<script>
import?Event?from?'../event.js';

export?default?{
????data()?{
????????return?{
????????????posts:?[],
????????????post:?{}
????????}
????},
????mounted()?{
????????Event.$on('added_tweet',?(post)?=>?{
????????????this.posts.unshift(post);
????????});
????}
}
</script>

這里我們定義了一個監聽?added_tweet?事件的監聽器,當該事件被觸發后,就可以執行相應的方法將數據渲染到時間線組件中。

和?FormComponent.vue?組件一樣,在?app.js?中注冊這個組件:

Vue.component('timeline-component',?require('./components/TimelineComponent.vue'));

我們專注高端建站,小程序開發、軟件系統定制開發、BUG修復、物聯網開發、各類API接口對接開發等。十余年開發經驗,每一個項目承諾做到滿意為止,多一次對比,一定讓您多一份收獲!

本文章出于推來客官網,轉載請表明原文地址:https://www.tlkjt.com/marketing/77.html
推薦文章

在線客服

掃碼聯系客服

3985758

回到頂部

主站蜘蛛池模板: 久久久久国产精品免费a片记大片_国产五月色婷婷六月丁香视频_亚洲人体一区二区_成人国产网址_51社区精品视频在线视频观看软件_日本一道高清_手机午夜看片_小箩莉h文徐韵婷合集小说 | 亚洲午夜精_国产18av_日韩福利精品_高潮喷视频在线无码_日韩国产欧美视频_JAPANESE国产高清在线观看播放_精品国产一区二区三区四区在线_啪啪精品视频 | 成人精品毛片_伦理一区二区_神马久久免费_精品欧美一区二区久久久伦_亚洲二级片_91久久网_freeXXXX国产HD中文对白_18禁黄网站禁片免费观看不卡 | 久久婷婷综合缴情亚洲狠狠_久久伦理_欧美日韩视频免费在线观看_欧美国产日韩成人_神天至尊动漫免费观看高清_最近中文字幕在线免费视频_久久久999精品_一级大片免费看 | 欧美精品一区二区视频_97超碰人人爱香蕉精品_成年人在线免费_黄瓜视频在线免费欧美日韩在线看_成人av大全_国产精品免费看_国产精品偷伦视频播放_国产欧美日韩亚洲一区二区三区 | 欧美人妖XXXX做受_少妇群交换bd高清国语版_日本久久精_免费动漫黄爽A片在线观看_国产清纯白嫩初高生在线播放视频_综合激情视频_欧美一级黄色片子_蜜桃av噜噜一区二区三区策驰 | 又大又硬又爽又黄A片哪里看_精品国产日韩专区欧美第一页_成人在线精品_中文字幕久久久_日韩中文字幕国产_好硬啊进去太深了A片_年轻的朋友免费观看_xxxxwwww中国 | 欧美精品一二三区免费_性大片爱赏网免费观看_久久免费视频5_亚洲AV无码一区二区三区国产_亚洲国产成人精品在线_久草在线视频网_四虎5151久久欧美毛片_性xxxx欧美老妇胖老太269 | 国产亚洲欧美一区二区三区四区_99热综合_一区二区精彩视频_欧美一二三四五六七区_日韩免费视频在线观看_四虎一区二区_影音先锋黄色网址_成人hd | 亚洲a级免费视频_国产欧美xxxx6666_av在线播放中字_日本一区二区视频在线观看_美女毛片免费看_韩国免费视频_日韩精品无码人成视频手机_欧美黄色大片免费观看 | 男人j桶进女人p无遮挡免费的视频_亚洲kkk4444在线观看_极品少妇被啪到呻吟喷水_国产精品臀控福利在线观看_97视频国产自在自线2020_视频h在线_国产成人午夜福利r在线观看观看_午夜福利啪啪片 | 无码人妻黑人中文字幕_日韩欧美中文视频_国产精品无码无片在线播放_亚洲精品GV天堂无码男同_久久ri资源网_亚洲天堂男人影院_国产成人欧美视频在线观看_一本大道久久a久久精二佰 | 国产在线一区视频播放_狠狠操91_免费看男女高潮又爽又猛视_欧美色蜜桃97_亚洲欧洲综合有码无码_日本人伦一区二区三区_日本逼视频_国产一级牲交高潮片16 | 国产情侣酒店自拍_jojo的奇妙冒险星尘斗士埃及篇免费观看_孕交VIDEOSGRATIS孕妇性欧美_日韩影院一区二区_日韩视频中文字幕精品偷拍_91麻豆国产级在线_国产人久久人人人人爽_久久夜av | 久草视频播放_乌克兰粉嫩xxx极品hd_中文字幕乱码日韩_伊人久久大香线蕉AV最新午夜_18禁止黄片免费观看_免费av毛片在线看_色老大影院www.97uuu.com_国产精品蜜 | 永久免费AV无码网站在线观看_成人三级在线_成人无码精品一区二区三区_成品片a免人视频_国产嫖妓一区二区三区无码_色欧美99_国产人妖在线播放_亚洲av人人澡人人爽人人夜夜 | 国产一级毛片视频在线!_天天草天天_国产精品无码永久免费不卡_91久久夜色精品国产九色_日韩亚洲在线观看_久久久妻_久久免费看黄A级毛片连期A片_久久精品国产久精国产69 | 日韩精品一区二区三区四区在线观看_亚洲AV在线观看天堂无码_好紧好大快点舒服使劲_粉嫩老牛aⅴ一区二区三区_奇米91_136fldh福利视频导在线_夜夜夜操_国产熟妇与子伦 | 国产精品不卡av在线观看_国产成人啪午夜精品网站_欧洲熟妇大荫蒂高潮a片视频_美女色又黄一级毛片_日韩二区三区_在线观看ww_中文无遮挡h肉视频在线观看_极品美女扒开粉嫩小泬18P | www久久久_78色淫网站女女免费_国产精品7区_九色视频免费观看_91精品观看91久久久久久国产_久草手机在线视频_久久国产劲暴∨内射新川_91久久人澡人人添人人爽爱播网 | 99热麻豆_毛片黄色视频_欧美激情内射喷水高潮_久久国产热精品波多野结衣av_中国裸体BBBBXXXX_日本精品视频一区_亚洲成人av片_男人天堂亚洲 | www国产精品内射_欧美日韩国产精品激情在线播放_FREE性少妇饥渴XXⅩXXHD_手机福利在线_亚洲另类伦春色综合妖色成人网_久久密臀_欧美又粗又硬又大免费视频Q_亚洲无在线观看 | 欧美日韩中文亚洲_国产有码在线_亚洲精品小视频在线观看_久久精品一级片_丰满人妻一区二区三区视频53_亚洲一区二区av在线_欧美一级片黄色_直接看的69xxx | 亚洲国产成人精品福利无码_亚洲免费视频网_黄色影院国产_www.亚洲视频_av男人在线东京天堂_国产丰满大波大屁股熟女_91在线勾搭足浴店女技师_欧美综合自拍亚洲综合图片区 | 欧美性战a久久久久久_欧美性爱一区三区_大地免费资源观看_精品1区2区3区4区_国产在线榴莲视频导航_97久久精品人人槡人妻人人玩_一级红色毛片_国产AV无码专区亚洲版 | 亚洲av制服丝袜日韩高清_亚洲国产综合专区在线播放_一二三四在线观看视频韩国_最近免费观看在线中文2019_亚洲综合色久_日韩网站在线播放_亚洲成av人片在线观看高清_大地资源网高清视频免费观看 | 成人免费视频www在线观看我_日韩免费无码成人久久久久久片_91影院高清_一级毛片超级播放_亚洲综合伊人_911网站大全在线观看_成人综合婷婷国产精品久久_蝌蚪91在线 | 国产精品久久久久久久久齐齐_亚洲理论_少妇人妻14页_麻花色_中文屏幕乱码av_久久久久久福利视频_60老熟女多次高潮露脸视频_精品国产一区二区三区av小说_毛片123 精品av中文字幕在线毛片_中国一级片_日批一级片_高清成人爽a毛片免费_美景之屋5在线观看_欧美乱妇无码毛片_中文亚洲成A人片在线观看_国产成人无码A区在线观看视频不卡 | 黑巨人与欧美精品一区_殴美在线一区二区不卡_极品美女扒开粉嫩小泬图片_少妇系列之白嫩人妻_欧洲色网站_高清自拍亚洲精品二区_日本免费a∨_有坂深雪在线xx99av | 婷婷成人丁香七月综合激情_中文字幕制服丝袜一区二区三区_东京一本一道一二三区_亚洲免费黄色_久久午夜免费观看_日本护士毛茸茸高潮_成人动漫网站入口_国产鲁鲁视频在线播放 | 国产AV仑乱内谢_国产精品一区二区三区在线免费观看_久久精品天天中文字幕人妻_成人毛片18女人_四虎影院最新网址_欧美成人精品一区二区综合_国语免费一级毛片私人_亚洲国产成人精品女人久久 | 女女同性一区二区三区免费观看_国产一级久久_日韩欧美成人精品_無码一区中文字幕少妇熟女_91porny国产_激情久久久久久_色综久久综合桃花网国产精品_18禁强伦姧人妻又大又 | 亚洲不乱码卡一卡二卡4卡5_亚洲va中文字幕_免费观看黄色毛片_在线观看中文字幕码_操av在线_午夜福利理论片高清在线观看_国产精品伦视频观看免费_成人亚洲一区二区一 | 日本不卡视频一二三区_亚洲区成人_插下面视频_aaa在线免费观看_av中文字幕久久专区_亚洲一区二区三区四区五区_日本一区二区精品视频_曰曰摸天天添天天湿 | 中文一级毛片_无码高潮少妇毛多水多水_亚洲AV成人片色在线观看吉沢_亚洲精品精华液一区二区_亚洲无线一二三四区手机_国产性生交XXXXX无码_人妻被中出不敢呻吟A片视频_玖玖资源站亚洲最大的网站 | 四虎永久在线精品国产馆v视影院_永久免费观看美女裸体视频的网站_女教师の爆乳bd在线观看_亚洲加勒比无码一区二区_性欧美牲交xxxxx视频欧美_五月色婷婷在线影院_国产人伦视频_粉嫩av一区二区三区在线 成人一在线视频日韩国产_超碰在线公开97_久久亚洲精品国产一区_国产精品久久不能_午夜亚洲精品专区高潮日w_kaori肉感在线播放_www.四虎影视.com_欧美日韩久 | 亚洲中文在线精品国产_日本成人一级片_免费毛片一区二区三区久久久毛片_白浆在线播放_国产精品久久久久久久久网站导航_japan白嫩丰满少妇videoshd_亚洲成人h_bnb998成人免费 | 男人天堂免费_小少妇的粉嫩小泬_www蜜桃视频_国产无遮挡裸露视频免费_成人性生交片无码免费看_国产亚洲自在精品久久_日产日韩在线亚洲欧美_夜夜看人久看2022 | 九色porny丨首页入口网页_国产在线观看高清视频黄网_影音先锋中文字幕一区二区_99人人看_日韩成人一区_91高清观看_中文字幕亚洲综合久久_婷婷夜色潮精品综合在线 | 日本50岁熟妇XXXX_成人爽视频_神马久草_欧美日韩黄色一级片_亚洲精品一线二线三线无人区_黄色成人影院在线观看_亚洲欧美激情精品一区二区_扒开末成年粉嫩的小缝图片 | 国产精品无码a片福利院网站_国产一区二区三区免费播放_久久精品高清_久久偷看各类WC女厕嘘嘘_超碰99人人_国产在线永久免费_国产一区精品最新_天堂中文最新版 |