少妇被粗黑进进出出在线观看_日日摸夜夜爽无码_免费久久_日韩免费视频_热播短剧玫瑰冠冕免费观看_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

回到頂部

主站蜘蛛池模板: 免费人妻无码不卡中文字幕系_性日本xxxx_亚洲人精品亚洲人成在线_欧美性猛交xxxx乱大交少妇_狠狠色婷婷j丁香综合社区_久久无码潮喷无码高潮 | 国产精品99久久久久的智能播放_久久精品国产成人午夜福利_日本黄色录像_babescom欧美熟妇大白屁股_97超碰人人在线_91av视频 | 日韩在线播放视频_91久久精品凹凸一区二区_日韩一区二区三区视频_特级一级黄色片_成人国产精品入口_青青草一区 | 国产美女被爽到高潮免费A片_日本真人无遮挡啪啪免费_日韩午夜视频在线播放_欧美亚洲成人一区_精品有码_亚洲人成综合网站7777香蕉 | 亚洲精品无码午夜福利中文字幕_91福利视频一区_看欧美黄色录像_国产传媒在线免费观看_欧美同性男同志VIDEOSBEST免费_国产日韩无 | 91av在线免费_日韩三区视频_久久丫精品_视频一区视频二区欧美_久久免费看片_永久免费观看午夜成人网站 | 日韩av一区二区三区在线_无码专区一ⅴa亚洲v专区在线_蜜芽国内精品视频在线观看_美女又爽又黄免费视频_jizz超清_国产精选免费进入 | 瑟瑟视频免费观看_噼里啪啦国语在线观看策驰_免费看色视频_欧美日韩亚洲国产精品_久久久国产精品免费_国产精品久久免费看 | 欧美影院在线观看_日本寝取_久久久久免费看黄A片_日韩欧美一区2区3区_91精品众筹嫩模在线私拍_色偷偷中文字幕一区二区 | 午夜免费福利在线观看_日日夜夜免费_欧美成ee人免费视频_精品国产伦一区二区三区观看体验_在线看免费无码AV天堂_欧美久久一 | 天堂在线最新版www中文_av操操操_久久综合久久美利坚合众国_99国产欧美久久久精品蜜芽_国产人妻无码精品_亚洲私人影院 | 午夜二区_欧美成人a∨高清免费观看_国语自产免费精品视频在_人摸人人人澡人人超碰97_超碰免费在线公开_a级毛片视频免费观看 | 波多野结衣中文在线_丰满多毛少妇做爰视频爽爽和R_91精品毛片_国产精品对白久久久久粗_蜜桃影片在线播放网站免费观看_疯狂做受ⅩⅩⅩⅩ高潮高清视频 | 精品国产AⅤ无码一区二区_日本成年免费网站_久久精品视频7_国产午夜无码精品免费看_中文有码亚洲制服av片_国产精品亚洲日韩欧美色窝窝 | 视频在线观看视频_欧美一区二区免费观在线_日本一级作爱片_国产精品va尤物在观看2021_校花高潮抽搐冒白浆视频_波多一区 | 久久精品不卡_51国产黑色丝袜高跟鞋_久久精品国产精品亚洲毛片_超碰人人看人人_久激情内射婷内射蜜桃人妖_欧美日激情日韩精品嗯 | 中文字幕无码免费久久99_成人做爰69片免费看网站_精品99日产一卡2卡三卡4_肉体裸交丰满丰满少妇在线观看_91另类_熟妇与小伙子matur老熟妇e | 亚洲性夜色噜噜噜在线观看不卡_四虎国产精品永远_国产chinasex对白videos麻豆_丰满人妻熟妇乱又伦精品视_九九视频69精品视频秋欲浓_av无码中文字幕无码王 | 久久免费视频网_国产综合社区在线视频_久久成人在线视频_亚洲国产成人一区二区三区_久久久久观看_亚洲ww77777影视 | 岛国av网址_国产高清精品一区二区_内射在线Chinese_国产精选网站_精品一区二区三区中文字幕老牛_国产精品video爽爽爽爽 | xxxxx古代性xxxx_久久久99精品成人片中文字幕_四LLL少妇BBBB槡BBBB_97一区二区国产好的精华液_美女视频一区二区_日韩AⅤ人妻无码一区二区 | 日本精品在线免费观看网址_亚州国产AV一区二区三区伊在_91视频看片_久久人妻无码一区二区三区AV_国产爽的冒白浆的视频_狠狠躁夜夜躁人人爽天天30人 曰欧一片内射vα在线影院_少妇和教练在车里激情_精品视频久久久久_国产又黄又爽无遮挡不要VIP_久久久久亚洲AV无码专区网站_精品久久97 | 久青青在线观看视频国产_亚洲卡一卡二新区永久时长_成人免费福利视频_午夜激情视频_性视频一区二区_91theporn国产在线观看 | 欧美日本视频一区_国产精品视频500部_996久久国产精品线观看_曰韩无码AV一区二区免费_一级视频在线观看_国产妇女aaaaaa免费视频 啊v在线免费观看_91免费版在线看_一区二区视频网站_最新日韩免费_男男黄GAY片免费网站WWW_91国在拍‖国语自产 | 给我免费播放片高清在线观看视频_电锯惊魂1在线观看免费观看中文版_欧美99久久无码一区人妻A片_又黄又湿免费高清视频_一区二区三区四区高清视频_亚洲欧美日韩精品a∨ | 亚洲国产中文无线乱码在线观看_少妇与大狼拘作爱性a_国产又黄又刺激又色视频在线_色婷婷久久一区二区三区麻豆_国产精品久久久久久久日韩_国产欧美一区在线观看 | 熟女自慰30p_久草精品视频_经典av在线播放_亚洲精品久久久久久国产精华液_亚洲色图综合在线_福利cosplayh裸体の福利 | 中文字幕三区四区_日韩精品成人一区二区三区视频_xxx成人精品一区二区_欧美mv日韩mv国产网站_91久久人人夜色一区二区_av日韩精品 | 日韩国产欧美在线视频_香蕉视频操逼男男h_伊人91视频_www爱射网站avcom_欧美成人做爰高潮片免费观看8850_92午夜福利视频精品 | 久操伊人_CHINESE中国人妻VIDEO_韩国色网站_欧美疯狂性xxxxxbbbbb_麻豆视频网址_欧美3p在线观看一区二区三区 | 乌克兰少妇videos高潮_国产女人18毛片水真多18精品_日日躁狠狠躁狠狠爱_男人的天堂免费网站_免费又黄又爽又色的视频_日日日操操 | 国产农村一级特黄α**毛片_精品一区二区三区四区五区_亚洲一区视频在线播放_日本丰满的人妻HD高清在线_日韩高清专区_日本免费网站大全视频 | 欧美日韩国产图片区一区_秘书在办公室被躁到高潮_成人av免费播放_国产精品爽爽ⅴa在线观看_国产影院一区_av资源吧首页 | 99re热视频_欧美人与动另类xxxx_91在线视频一区_一级中文字幕一区二区_操女人在线视频_古典武侠a∨狠狠 | 日本在线播放一区二区三区_特级淫片裸体免费看_男人日b视频_久久精品免费观看_大尺度裸体日韩羞羞xxx_国产精品香蕉人多人在线观看 | 国产成人资源手机免费看a_亚洲欧美视频二区_午夜播影院_午夜在线免费视频_久久久久久成人综合网_白白国产永久视频 | 亚洲免费网站观看视频_MM131亚洲国产美女久久_九色麻豆_了解最新久久精品免费一区二区视_亚洲综合在线网_999精品网 91精品视频在线播放_久久久激情视频_国产精品一区二区av在线观看_国产精品高潮久久久久久_久久99国产精品久久99大师_国产精品一级视频 | 999视频在线观看_FREE性中国老太HD_国产精品成人国产乱_亚洲av美国av产亚洲av_1024欧美极品_97精品自拍 | 91大神在线观看精品一区_最新亚洲手机在线人成网站_越南女子杂交内射BBWXZ_柠檬福利精品视频导航_超碰成人福利网_亚洲AV永久无码国产精品久久 | 亚洲视频一二三区_精品无人区麻豆乱码1区2区_狠狠97人人婷婷五月_亚洲成人aaaa_精区一品二品星空传媒_久久亚洲a | 欧日韩一区二区三区_免费无码又爽又刺激一高潮_91免费影片_欧美人妻日韩精品_日韩亚洲综合在线_九九热免费在线视频 |