laravel+vue开发环境搭建

From: https://www.jianshu.com/p/1c2cc11ba46f

描述

最近通过laravel在公司做了一些项目,但本身前端出身的我,总是感觉lphp开发过程中,前端写好页面,然后后端还需要再套blade模板,感觉这样开发效率太慢,太low。于是自己抽了空闲时间,在laravel中搭了vue开发环境。这样感觉前后端分离,开发更有效率。而且我更喜欢这种前后分离的开发模式。其实laravel中已经给我们配置好了前端各种开发环境只需要我们去自己稍微的手动配置一下就可以,所以今天我搭了一个简单的开发环境,从前台vue+vue-router+vuex+axios,到后台laravel框架,model,controller,到数据库mysql全部打通。git:项目地址,需要打大家点个start。
首先看一下整体的laravel+vue目录结构

laravel+vue目录结构

 

1.搭建laravel+vue环境

这一步假设大家都已经有了php环境,同时也安装了composer,这样我们只需要通过命令直接去下载一个标准的laravel目录。
composer create-project --prefer-dist laravel/laravel laravel+vue "5.5.*"
这样下载的项目里,laravel里面配置了webpack.mix.js。不需要我们手动配置。这一步需要等待一段时间。
在安装laravel的时候,我们也可以同时安装node_modules初始化node模块
npm install
这两步等待的时间比较长,安装好后,目录结构就想上面一样.如果你是从github中下载下来的缺少node_modules模块也需要npm install一下。上面下载好目录结构以后,我们修改一下webpack.mix.js文件。添加一个代理端口
mix.browserSync({ proxy: 'localhost:8000'});
接下来我们在控制台通过php命令启动项目,
php artisan serve
这个项目就会通过你代理的端口启动起来,地址是你本地地址http://127.0.0.1:8080。一个显示laravel的界面就在浏览器中展现,如图

控制台命令

 

效果显示

2.vue配置

下面我们把项目中的显示内容清理一下,为vue整合做准备。我们把在resources/views目录下的welcome.blade.php中的显示内容清理掉。只保留基本的html结构。
这里我们接着把vue-router安装好,后续会用到
npm install vue-router

html结构


在vue项目中我们需要一个app.js作为启动入口。这个app.js在laravel中项目已经为我们建好了,在/resources/assets/js下面,我们只需要把他引过来
<script type="text/javascript" src="/js/app.js"></script>
我们还需要aap.css,也在/resources/assets/css下
<link rel="stylesheet" type="text/css" href="/css/app.css">
配置好之后,我们先在welcome.blade.php中添加上vue的路由放在div中,
<router-view />
去修改app.js

 

/*** First we will load all of this project's JavaScript dependencies which* includes Vue and other libraries. It is a great starting point when* building robust, powerful web applications using Vue and Laravel.*/
require('./bootstrap');
window.Vue = require('vue');
/*** Next, we will create a fresh Vue application instance and attach it to* the page. Then, you may begin adding components to this application* or customize the JavaScript scaffolding to fit your unique needs.*/
var app = new Vue({el: '#app',template: "<div>这是laravel+vue的项目</div>"
});

开启npm run watch,刷新浏览器,如图

 

最简单的一个laravel+vue的项目demo

至此,laravel+vue搭建的项目完全的跑起来了,这一阶段,没有涉及到vue-router,没有涉及到后台和数据库。下面进一步完善路由的管理

3.vue-router管理页面跳转

在上面我们安装了vue-router在app.js中引入vue-router包,并使用此插件。接下来>在/resources/assets/js目录下创建一个路由管理器route.js。
{ path: '/', component: require('./compontents/Index.vue')
我们在/resources/assets/js/compontents目录下创建一个Index.vue组件
<template></template><script>export default {name: "Index"}</script><style scoped></style>
接下来我们在修改一下app.js。

require('./bootstrap');
window.Vue = require('vue');
import VueRouter from 'vue-router';
Vue.use(VueRouter);
import routes from './route';    // 路由配置文件
// 实例化路由
const router = new VueRouter({routes
})
var vm = new Vue({router
}).$mount('#app');

配置好之后,刷新浏览器,如图

 

显示配置好的index组件

路由配置完成后,接下来就是后台设计与通信。我们先做后台,

4.后台laravel model+controller设计

在设计后台之前我们先把数据库链接好,修改.env文件,链接好本地数据库,数据库表结构在git上面有,database下面。
在app目录下面创建Models,在Models下面创建一个user类

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{protected $table = 'user';protected $guarded = [];// 测试类public function  getInfo(){$users = self::get();return $users;}
}

在app\Http\Controllers目录下创建UserController控制器

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Routing\Controller;
class UserController extends Controller
{public function __construct(){$this->objUser = new User();}public function getUserList(){return $this->objUser->getInfo();}
}

在routes\api.php下面配置访问UserController控制器下的getUserList方法的路由

<?phpuse Illuminate\Http\Request;/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/Route::middleware('auth:api')->get('/user', function (Request $request) {return $request->user();
});
Route::any('/getUserList','UserController@getUserList');

导入数据表,配置好数据库的链接。在浏览器输入localhost:8000/api/getUserList是否能获取数据,如图

 

获取数据

5.axios+vuex配合获取后台数据渲染页面

接下来,就是配置前台axios访问后台接口获取数据并渲染到页面中显示。在这一块,我们通过vuex状态树,来管理数据的变化。虽然只是一个demo,并没有什么太大的作用。但在后续开发应用中,庞大的数据源很难管理,我们就可以借助vuex来管理。通过npm命令行安装vuex
npm install vuex
同时还需要安装axios
npm install axios
安装好后,我们在resources\assets\js目录下创建store文件,在store文件创建store.js文件

import Vue from 'vue';
import Vuex from 'vuex';
import user from './user';
Vue.use(Vuex);
export default new Vuex.Store({// 可以设置多个模块modules: {user}
});

在resources\assets\js\store创建user.js

import api from '../api';
export default{state: {user: []},mutations: {// 注意,这里可以设置 state 属性,但是不能异步调用,异步操作写到 actions 中SETUSER(state, lists) {state.user = lists;}},actions: {getUser({commit}) {api.getUser().then(function(res) {//console.log(res);commit('SETUSER', res.data);});}}
}

在resources\assets\js目录下创建api.js集中存放访问接口的api,后期便于管理

import axios from 'axios'
export default {// 首页接口getUser: function (params) {return axios.get('api/getUserList')},
}

上面文件创建好之后,我们还需要修改app.js引入store,因为在store中我们引入了vuex,在这里就不需要引入vuex,直接引入store。


require('./bootstrap');window.Vue = require('vue');import VueRouter from 'vue-router';
Vue.use(VueRouter);
import store from './store/'; // vuex 数据存储所需对象
import routes from './route';    // 路由配置文件
// 实例化路由
const router = new VueRouter({routes
})var vm = new Vue({store,router
}).$mount('#app');

最后在Index.vue中获取数据并渲染

<template><div>1<ul class="list-group"><li class="list-group-item"v-for="item in user">{{ item.account }}</li></ul></div>
</template><script>import { mapState, mapActions } from 'vuex';export default {name: "App",// 映射 vuex 上面的属性computed: mapState({user: state => state.user.user}),created() {this.getUser();//console.log(this.$store.state);},methods: {// 映射 vuex 对象上的方法...mapActions(['getUser'])}}
</script><style scoped></style>

最后刷新页面如图,

 

最后的效果图

总结

至此,整个laravel+vue搭建的环境从前台到后台到数据库完全打通。整片文章,可能存在很多问题,这是一个整体的思路。后续开发,我们就可以按照这个结构愉快的码代码,比起套模板的形式,舒服多了。这个结构在后续上线的时候其实存在一些问题,比如seo的问题,首屏加载慢的问题等。在这个基础上,我们完全可以在借助其他库,完成优化。后续可能我会继续整合一下服务选渲染的问题。最后整个项目建议在git上下载,因为上面文章只是大体思路,可能存在一路下来粘贴复制不能跑的问题,目录结构稍有不同。要是快速的看到效果,直接去下载git:项目地址,下载的同时,需要大家点个star,支持一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GC Blocks Lost等待事件

在Oracle RAC环境中&#xff0c;无论我们从AWR自动负载性能报告、Statspack或者Grid Control中都可以找到Oracle数据库软件所收集的全局缓存工作负载统计信息(global cache work load statistics)&#xff1b;其中就包含了全局缓存块丢失(Global cache lost blocks)的统计信息(…

WCF简单教程(5) 用IIS做Host

第五篇&#xff1a;用IIS做Host之前几篇的Demo中&#xff0c;我们一直在用控制台程序做Server&#xff0c;今天换IIS来做Host&#xff0c;在Web Application中添加WCF的服务。其实在Web Application中添加WCF服务是最简单的&#xff0c;“新建项”中有专用的“WCF服务”&#x…

黑苹果折腾记

From: https://fishedee.com/2018/10/04/%E9%BB%91%E8%8B%B9%E6%9E%9C%E6%8A%98%E8%85%BE%E8%AE%B0/ 1 概述 黑苹果折腾记&#xff0c;原来的Macbook Pro已经不太好用了&#xff0c;运行编译时就开始风扇呼呼声的响&#xff0c;我只有想办法将苹果安装上现有的台式机上了。 类…

解决爬虫中文乱码问题

解决爬虫中文乱码问题 今天群里有个人反映某个网址爬出来的网页源代码出现中文乱码&#xff0c;我研究了半天&#xff0c;终于找到了解决方法。 一开始&#xff0c;我是这样做的&#xff1a; import requestsurl http://search.51job.com/jobsearch/search_result.php?fromJs…

一夜暴富之前的漫漫长路

一夜暴富之前的漫漫长路发布于&#xff1a;2013-08-05 09:50阅读数&#xff1a;987那你现在在做什么&#xff1f; 唉&#xff0c;我讨厌这个问题。 事实上&#xff0c;我正在努力做一个新的项目&#xff0c;但没有取得任何的进展。 但是&#xff0c;我并没有抱怨什么&#xff0…

java开发过程中,报错Dangling meta character '*' near index 0,解决办法

From: https://blog.csdn.net/zhouzhiwengang/article/details/53493810 1、split方法转化字符串为数组&#xff1a; String[] strPicArr map.get("hw_pic").toString().split("*"); 报错&#xff1a; java.util.regex.PatternSyntaxException: Dangling…

演示:Linux工程环境应用实训(防火墙、NAT、静态路由)详细配步骤

各位童鞋注意&#xff1a;该实验完成可以使用GNS3与4虚拟机进行桥接&#xff0c;然后在一台物理计算机上完成&#xff0c;不虽要去拿真正的4台服务器或者交换机路由器来连成一个网络&#xff0c;现在大家都使用网络仿真教学与实验&#xff01;Linux工程环境应用实训&#xff08…

Linux架构

Linux架构 作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 我以下图为基础&#xff0c;说明Linux的架构(architecture)。(该图参考《Advanced Programming in Unix Environment》) 最内层是硬件…

Linux C学习--getline()函数

getline()函数是什么&#xff1f;百度百科这样解释&#xff1a; getline不是C库函数&#xff0c;而是C库函数。它会生成一个包含一串从输入流读入的字符的字符串&#xff0c;直到以下情况发生会导致生成的此字符串结束。1&#xff09;到文件结束&#xff0c;2&#xff09;遇到函…

Mac10.14.4 独立显卡 影驰GTX 760 4GB成功驱动

先了解下这篇文章: https://blog.csdn.net/JoeBlackzqq/article/details/39612351 这是我的硬件配置! 当初装10.14.4时, 看网上文章说我的独显是无法驱动的,所以当时用的是我的核显(CPU i7-4770k HD4600)装上的. 但是在系统稳定的跑了个把月后,不知什么原因(一阵电流声), 我…

在Windows上编译MongoDB C Driver

2019独角兽企业重金招聘Python工程师标准>>> Mongodb 是采用 Scons 来构建的。Scons是一个Python写的自动化构建工具&#xff0c;从构建这个角度说&#xff0c;它跟GNU make是同一类的工具。所以要编译MongoDB的C语言驱动&#xff0c;不仅要有C/C开发环境&#xff0…

异常处理_Maven之web项目java.lang.LinkageError

浏览器运行项目异常如下: HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionjava.lang.LinkageError: loader constraint violation: when resolving interfa…

pyramid新建项目

2019独角兽企业重金招聘Python工程师标准>>> 例子&#xff1a;本项目在D盘 (1) C&#xff1a;\Users\Adminstrator>D: #进入到D盘 (2) D:>mkdir test #新建目录test (3) D&#xff1a;\cd test #进入test目录 (4) D:\test>pcreate -s starter myproject #新…

Linux C 学习 单向链表

最近从Linux C数据结构和算法学起&#xff0c;下面是一个单向链表的写法&#xff0c;代码如下&#xff1a; [cpp] view plaincopy #include <stdio.h> #include <malloc.h> int n0; typedef struct code { int data; struct code *next; }Li…

[转载]如何将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明&#xff0c;标题不一定准确&#xff0c;因为盆地并未详细了解清楚这里的公钥、私钥机制&#xff0c;只是根据以前的印象有个大概的理解&#xff0c;且最终以解决问题为主要目的&#xff0c;并未深究。标题的…

exports、module.exports和export、export default到底是咋回事

前言 难得有空&#xff0c;今天开始重新规范的学习一下node编程。 但是引入模块我看到用 require的方式&#xff0c;再联想到咱们的ES6各种export 、export default。 阿西吧&#xff0c;头都大了.... 头大完了&#xff0c;那我们坐下先理理他们的使用范围。 require: node …

linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务

2019独角兽企业重金招聘Python工程师标准>>> 两台服务器111&#xff0c;和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上 1&#xff1a;我的111服务器上是当前用户&#xff1a;sx A: 查看当前用户的计划任务&#xff1a;crontab -l是查看当前…

自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法...

前言&#xff1a;这几天做客户回访&#xff0c;感触很大&#xff0c;用户只要是留反馈信息&#xff0c;总是一种恨铁不成钢的心态&#xff0c;想用你的app&#xff0c;却是因为你的技术问题&#xff0c;让他们不得不放弃&#xff0c;而你一个回访电话却让他们尽释前嫌&#xff…

Linux c 算法与数据结构--栈

前段时间写了双向链表&#xff0c;现在写个栈&#xff0c;写之前&#xff0c;先简单介绍链表 队列  栈的区别&#xff1a; 链表&#xff0c;队列&#xff0c;堆栈的区别 1、栈是个有底的口袋&#xff0c;像袜子。 队列是没底的口袋&#xff0c;像通心粉。 所以&#xff1a;栈…

Spring 实现数据库读写分离

Spring 实现数据库读写分离 现在大型的电子商务系统&#xff0c;在数据库层面大都采用读写分离技术&#xff0c;就是一个Master数据库&#xff0c;多个Slave数据库。Master库负责数据更新和实时数据查询&#xff0c;Slave库当然负责非实时数据查询。因为在实际的应用中&#xf…