少妇被粗黑进进出出在线观看_日日摸夜夜爽无码_免费久久_日韩免费视频_热播短剧玫瑰冠冕免费观看_japanese精品少妇

Laravel + Vue 使用示例系列:構建一個類似 Twitter 的 Web 應用
  • 更新時間:2025-05-09 21:30:47
  • 分享
  • 發布時間:7年前
  • 9259

在這一篇示例教程中,我們將會構建一個類似 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">
????????<form?@submit.prevent="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">
????????<form?@submit.prevent="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

回到頂部

主站蜘蛛池模板: 91精品国产99久久久久久红楼_欧美高清在线一区二区_www.99在线观看_亚洲av日韩av不卡在线观看_国产一区二区三区无码_亚洲—本道在线无码AV发 | 欧美成人版在线播放_日本a免费_红杏成人性视频免费看_欧美视频手机在线观看_在线观看免费视频网站A站_又色又爽又黄又硬的视频免费观看 亚洲a级黄色_yourporn国产精品_国语自产拍精品香蕉在线播放_亚洲精品无码一区二区三区四虎_成人三级视频在线观看不卡_日本一级黄色录像 | 在线观看视频免费一区二区三区_97人妻天天爽夜夜爽二区_日韩久久午夜一级啪啪_国产一区二区视频在线_99久久久_精品国产这么小也不放过 | 国产精品偷伦视频免费手机播放_在线观看二区_色图综合网_一区二区三区日韩精品视频_精品免费日产一区一区三区免费_久久久国产精品一区二区三区 | 中文字幕日本最新乱码视频_日韩av成人在线_韩国视频一区二区_免费在线播放黄色_亚洲国产精品无码成人片久久_青青青在线视频观看 | JIZZ护士奶水太多_国产人人插_欧美一级淫片免费_中国av在线_色一情一区二区_国产精品345在线播放 | 草比av_日本理论片中文字幕_最新中文字幕av无码专区_国产精品99久久久久久夜夜嗨_久久人人爽人人爽人人av_性欧美在线观看 | 人人澡超碰碰一区二区三区不卡_日本免费视频在线观看_91视频小说_天堂V亚洲国产V第一次_天天干干天天_国产资源在线观看入口av | 国产一区二区三区免费高清在线播放_欧美精品一二_亚洲va中文字幕无码_最爽爱爱高潮免费视频_欧美日韩国产不卡在线看_日av中文字幕 | 亚洲免费网站观看视频_MM131亚洲国产美女久久_九色麻豆_了解最新久久精品免费一区二区视_亚洲综合在线网_999精品网 91精品视频在线播放_久久久激情视频_国产精品一区二区av在线观看_国产精品高潮久久久久久_久久99国产精品久久99大师_国产精品一级视频 | av亚洲产国偷v产偷v自拍小说_好男人社区www影视_黄色国产一区二区_chinese少妇偷_男人天堂五月天_麻豆精品视频在线 | 亚洲va天堂va欧美ⅴ_韩国一级毛片视频_久久三级毛片_日韩欧美亚洲一区二区三区_影音先锋狠狠操_少妇下面好紧好多水真爽播放 | 日日噜噜噜夜夜爽爽狠狠视频寻花_av视频在线观看_一区av_国产视频第一页在线观看_免费无码国产裸体_亚洲精品无码不卡 | 欧美人与物VIDEOS_97天天操_国产超爽人人爽人人做人人爽_毛片高清_深夜国产_中文字幕av一区二区三区四区 | 亚洲日韩中文字幕无码一区_久久久久综合网_日韩中文字幕网站_夜夜爽浪潮av99_九九久久精品国产免费看小说_催眠教师~淫辱の教室 又爽又猛又粗国产免费_夜夜躁狠狠躁_欧美三极_无码成人片在线播放_高清一区二区三区视频_欧美久久久久久久久久伊人 | 日产精品高潮一区二区三区5月_xx色综合_无遮挡在线_久久国产精品毛片_把腿张开老子cao哭你动态图_天天爱夜夜 | 亚洲精品成人网线在线播放va_色妹子av_久久久久国产一级毛片高清片_成人亚洲精品_国产在线1区_国产91极品福利手机观看 | 久久99国产精品成人_红杏网站永久免费视频入口_美女视频黄的_白丝无内液液酱视频在线观看_无码专区中文无码野外_在线成人国产天堂精品av | 亚洲一区二区免费在线观看_十八岁污网站在线观看_国产精品无码首页自拍_国产福利视频一区二区_91视频中文_玖玖玖精品 | 国产精品99国产精品九九_精品国产18久久久久久_五月婷婷基地_日本三级视频在线播放_国产九九99精_欧美搡BBBBB搡BBBBB | 神马久久免费视频_未禁18成禁人免费无遮挡_操你啦青青草_秋霞国产午夜伦午夜福利片_国产视频激情_爱爱视频免费在线观看 | 无码专区一va亚洲v专区_性爱视频在线播放_日韩在线精品一二三区_欧美日韩精品一区二区三区_丝袜无码专区人妻视频_成人午夜特黄aaaaa片男男 | 久久大香伊蕉在人线免费AV_fc2成人免费视频_日本无码V视频一区二区_国产三级久久三级久久_色久视频在线播放_国产日产一区二区三区四区五区介绍 | 久久久久久国产精品三级_伊人网在线免费视频_国产成人69视频午夜福利在线观看_美女很黄很黄免费_精品一区二区视频在线观看_中文人妻熟妇乱又伦精品 | 日本免费看视频_69pao强力打造_亚洲AV伊人久久综合密臀性色_国产真实伦在线观看_国产综合精品一区_强行扒开女同学腿看屁股眼 | www五月天com_久久毛片免费无人区蜜臀av_鸥美一级毛片_sese亚洲_蜜臀视频网站_国产精品.www | 国内精品视频在线观看_国产一区二区三区免费在线_亚洲精品xxx_日本熟妇XXX50_国产日产欧产精品精品郁金香_日韩一级片免费在线观看 | 蜜桃视频免费在线观看_精品久久久久久免费人妻_西出玉门在线观看_国产a一片_免费观看Aⅴ成人片_久久人体rtys | 成人网页在线观看_国产视频毛片_日本特级片_欧美一区二区综合_国产亚洲精品激情久久_一级毛片在线免费播放 | 在线观看亚洲精品国产福利片_欧洲极品少妇_麻豆tv在线看_亚洲大片_2018日日夜夜操_色老大久久综合网天天 | 日产精品高潮一区二区三区5月_xx色综合_无遮挡在线_久久国产精品毛片_把腿张开老子cao哭你动态图_天天爱夜夜 | 免费看成一片_欧美久久天天综合香蕉伊_精品国产久九九_亚洲a∨无码一区二区_欧美精品一区二区三区很污很色的_久久久国产精品福利片 | 老熟妻内射精品一区_欧美+国产+日产+韩国_自拍欧美_最近中文字幕高清中文字幕第一_中文字幕Va一区二区三区_久久精品亚洲成在人线av网址 | 欧美日韩视频在线第一区_中文字幕第2页不卡_久久9999免费视频_久久久久久一级_久久久综_亚洲永久字幕 | 污18禁污色黄网站_欧洲做爰大片_天天色天天骑天天射_国产精品永久久久久_男女av在线免费观看_久久久入口 | 亚洲精品国产成人综合久久久久久久久_亚洲精品国产一_久黄色片_中文字幕一区二区三区免费_91精品在线免费观看视频_最新精品视频 | 久久久久亚洲AV无码尤物_久久国产精品影院_亚洲激情_日a在线_黄色影院在线_国产在线观看精品一区二区三区 | 日韩女同互慰一区二区_八戒午夜福利啪啪影视_天天搞av_在线中文字幕一区二区精品区_亚洲一区成人在线_69热视频 | 亚洲欧美综合在线天堂_欧美狂野另类xxxxoooo_无码GOGO大胆啪啪艺术_国产精品日韩三级_久久国产在线观看_亚洲午夜国产精品无码 | 免费人妻无码不卡中文字幕系_性日本xxxx_亚洲人精品亚洲人成在线_欧美性猛交xxxx乱大交少妇_狠狠色婷婷j丁香综合社区_久久无码潮喷无码高潮 | 国产99久久久国产精品~~牛_日本www_九七在线视频_久久国产色综合_粉色视频在线观看高清免费完整_一级黄色免费视频 |