最近学了vuejs和laravel,然后顺便就撸了简单的demo,这里将会根据这个demo介绍下如何使用vuejs+laravel开发一个简单的单页面应用,demo的github地址是https://github.com/helbing/laravel-vue-start-kit

开发环境

windows 穷,没办法,买不起苹果
phpstudy windows中最好的php集成开发环境,没有之一

开发中所需的一些包介绍

package.json

如果会vuejs的话,那么绝大多数的包就算不用介绍也知道是用来做什么的

composer.json

这里将会用dingo apijson web token来开发后台API
(1)dingo api文档,https://github.com/dingo/api/wiki
(2)jwt-auth文档,https://github.com/tymondesigns/jwt-auth/wiki

后端API配置

通过那两篇文档,我们知道需要在如下几个地方进行配置
(1)在config/app.php中加入

(2)执行php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider",然后再config目录下就会自动生成api.phpjwt.php,接下来执行php artisan jwt:generate生成JWT_SECRET,最后在.env文件中写入

app/Http/Kernel.php中加入

(3)jwt-auth依赖于user表,也就是database/migrations/2014_10_12_000000_create_users_table.php,执行php artisan migrate生成user表,并确保app/User.php存在,然后类中加入protected $table = 'user';,不然声明使用user表,不然会默认使用users

初尝dingo api

打开app/Http/routes.php文件
(1)引入dingo api,$api = app('Dingo\Api\Routing\Router');
(2)创建API版本

(3)创建路由

(4)创建相应的controller和action


BaseController

在开始访问API前,我们先来进行一些开发环境上的配置
打开phpstudy

(1)其他选项菜单->打开hosts

(2)其他选项菜单->站点域名管理

(*)网站目录需要指向项目的public文件,让/public/index.php作为项目的入口文件

执行php aritsan api:routes

接下来就可以在postman调试接口了demo.vue:82/api/test
.env文件中的API_VERSION修改为v2,再次访问接口就可以看到去调用的是Api/V2/Controllers/TestController@index
.env文件中的API_PREFIX修改为api2,执行php aritsan api:routes,可以看到

使用jwt-auth

这里将会以我写的demo来讲解如何使用jwt-auth这个包,打开Api/V1/Controllers/AuthController,可以看到里面写了三个action

(1)me用于获取用户信息和验证token是否过期或有效,通过传递token可以进行解析获取用户信息
(2)login用于登录,password字段是必须传递的
(3)register用于用户注册,password必须采用bcrypt加密,不然在JWTAuth::attempt的时候会获取不到tokenJWTAuth::attempt会对传递进去password自动进行bcrypt加密

接下来我们注册相应的路由,然后用postman进行接口调试,(*)使用jwt.auth中间件就意味着每次调用接口的时候必须传递token,中间件会对token进行验证,如demo.vue:82/me?token=token_value

现在我们通过postman调用demo.vue:82/register接口,并传入四个参数nameemailpasswordpassword_confirmation

可以看到成功返回了tokenname,在数据库中也能看到用户确实被创建了

接下来我们来调试demo.vue:82/login接口,传入emailpassword两个参数
(1)输入了错误的密码

可以看到返回的错误信息

(2)输入了正确的密码

成功返回了tokenname,这就说明用户确实登录成功了

最后我们来调试demo.vue:82/me这个接口,由于该接口使用了jwt.auth这个中间件,所以每次调用接口的时候需要带上token
(1)传入了一个不存在的token

(2)传入了正确的token

成功返回了用户信息

前端部分

前端部分我不打算讲如何一步一步写代码,这里会讲一些需要注意的点和一些技巧,参考我写的demo的代码,相信你一定能很快学会如何结合laravel和vuejs写一个单页面应用

(1)Elixir的使用

Elixir是Laravel提供了一套干净、平滑的API用于为Laravel应用定义基本的Gulp任务

之后gulp && npm run dev,这样以后保存代码都会自动gulp,同时还会同步到浏览器,大大节约了开发时间

(2)beforeEach和自定义字段的使用

beforeEach和自定义字段的用法可以查看文档http://router.vuejs.org/zh-cn/api/before-each.htmlhttp://router.vuejs.org/zh-cn/route.html

首先打开/resources/assets/js/routers.js,可以看到这段代码

我在路由跳转前进行了一些判定,我在/auth/profile/dog等路由设置了自定义字段auth: true,让用户在跳转到这些页面时候判定token存不存在,不存在则表明用户未登陆,直接跳转到/auth/login。在/auth/login/auth/register我设置了自定义字段guest: true,让用户在登陆后(token存在)无法再跳转到这些页面,如果访问了,则跳转到/auth/profile

localStroage的使用

因为调用某些接口需要用到token,所以需要将token值存入localStroage中方便取出使用。虽然可以将token存在store中,然而在有些地方,比如ready()中无法获取到store中的值(参考/resource/assets/js/components/Auth/Profile.vue),所以将token值存储在localStroage比较合适。

使用vue.js + laravel开发单页面应用的更多相关文章

  1. EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  2. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  3. angular开发单页面应用--页面资源部分

    关于angular是什么,能够干什么就不在这里解释了,自行搜索了,或者等稍晚一点再解释... angular适合开发单页面应用,这句话在介绍angular的网站和博客里都可以提到.因为angular是 ...

  4. Vuebnb 一个用 vue.js + Laravel 构建的全栈应用

    今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. 这本书是围绕着一个案例研究项目,Vuebnb,简单克隆Airbnb.在这 ...

  5. vue.js数据可以在页面上渲染成功却总是警告提示某个字段“undefined”未定义

    最近在开发公司的一个后端管理系统,用的是比较流行的vue框架.在开发过程中,总是出现各种各样的报错问题,有警告的,有接口不通的,有自己马虎造成的低级错误的等等,这些错误在一些老司机面前分分钟解决,但今 ...

  6. 用vue.js重构订单计算页面

    在很久很久以前做过一个很糟糕的订单结算页面,虽然里面各区域(收货地址)使用模块化加载,但是偶尔会遇到某个模块加载失败的问题导致订单提交的数据有误. 大致问题如下: 1. 每个模块都采用usercont ...

  7. 怎样开发单页面app

    groot.view("myview", function (vm, ve) { ve.loada = function () { require("./app/page ...

  8. vue.js 使用 vue-router 修改页面标题

    module.exports = { name: 'myComponent', data: {} route{ data: function(){ document.title = "页面标 ...

  9. vue.js 跳转同一页面,传不同值,组件监听路由

    watch: { '$route' () { this.type = this.$route.params.type this.loadData() } },

随机推荐

  1. php验证18位身份证,准到必须输入正确的身份证号,

    /** * 验证18位身份证(计算方式在百度百科有) * @param string $id 身份证 * return boolean */ function check_identity($id=' ...

  2. php三级联动(html,php两个页面)

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  3. TXT电子书格式怎样转换成epub格式

    怎样将TXT电子书格式转换成epub格式呢?因为很多时候不同的阅读器所支持的电子书格式是有所不同,所以电子书格式转换的问题,在生活中也是会经常出现的问题.如果我们需要将TXT电子书格式转换成epub格 ...

  4. [设计语言][统一建模语言][软件开发方法学][UML] UML

    背景介绍 UML是一种统计建模语言. WIKI: https://en.wikipedia.org/wiki/Unified_Modeling_Language UML是OMG (object man ...

  5. RabbitMQ的消息确认机制

    一:确认种类 RabbitMQ的消息确认有两种. 一种是消息发送确认.这种是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递.发送确认分为两步,一是确认是否到达交换器,二是 ...

  6. SpringBoot-性能优化之扫包优化

    性能优化 组件自动扫描带来的问题 默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用.使用这个注解后,会触发自动配置( ...

  7. threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/dyuproject/protostuff/MapSchema$MessageFactory] with root cause

    错误记录 前几天朋友问我一个错误,顺便记录一下,关于redis 工具类,protostuff序列化报错. threw exception [Handler processing failed; nes ...

  8. 20190422 DW/BI系统

    其实很多人都不能理解操作型应用系统和分析型系统的意义,主要问题在于这两个系统所面对的用户和需求是不相同的. 建模重点“凡事应该简单,简单到不能再简单”

  9. python基础(15)-socket网络编程&socketserver

    socket 参数及方法说明 初始化参数 sk = socket.socket(参数1,参数2,参数3) 参数1:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 ...

  10. 四、UI开发之核心基础——约束(实用)

    概述 本节将会介绍最常用的几种约束,基本可以满足90%以上的UI布局要求. 先附上一份其他优秀博客https://blog.csdn.net/companion_1314/article/detail ...