当前位置: 首页 > news >正文

laravel5.6.* + vue2 创建后台

本地已经安装好了composer

1.新建 Laravel5.6.*项目
composer create-project --prefer-dist laravel/laravel laravel5+vue2+demo '5.6.*'

2. cd laravel5+vue2+demo

3. npm install

/routes/web.php 路由文件中, 修改

Route::get('/', function () {return view('index');
});

新建 Hello.vue 文件

在 resources/assets/js/components 目录下新建 Hello.vue 文件

<template> <div><h1>Hello, laravel</h1><p class="hello">{{ msg }}</p></div>
</template><script>
export default {data() {return {msg: 'This is a Laravel with Vue and Element Demo.'}}
}
</script><style>
.hello {font-size: 2em;color: green;
}
</style>

修改 app.js 文件,渲染组件
修改 resources/assets/js/app.js 文件

require('./bootstrap');window.Vue = require('vue');
// Vue.component('example', require('./components/Example.vue')); // 注释掉
import Hello from './components/Hello.vue'; // 引入Hello 组件
const app = new Vue({el: '#app',render: h => h(Hello)
});

app.js 是构建 Vue 项目的主文件,最后所有的组件都会被引入到这个文件,在引入所有组件之前,bootstrap.js 文件做了一些初始化的操作。同时,因为有 window.Vue = require('vue') ,不需要 import Vue from ‘vue’ 重复导入 Vue 了。

新建 Laravel 视图文件,和 Vue 交互
在 resources/views 目录下新建 index.blade.php 文件

<!doctype html>
<html lang="en">
<head> <meta charset="UTF-8"><title>laravel</title>
</head> 
<body><div id="app"></div><script src="{{ mix('js/app.js') }}"></script>
</body> 
</html>

你可能在其他教程中看到有的在使用 assets 函数,这两个函数的主要区别就是 assets 函数会直接使用所填路径去 public 文件夹下找文件,而 mix 函数会自动加载带 hash 值的前端资源。这是和 Laravel 前端资源的缓存刷新相关的,如果现在还不明白,不要紧,你记得使用 mix 函数就好了,然后继续往后看。

启动网站服务

php artisan serve

编译前端组件,运行

npm run dev 

该命令默认会去执行根目录下的 webpack.mix.js 文件,使用 Laravel 提供的 Laravel Mix 编译资源,并将编译好的资源放在根目录 public 文件夹下。

说明:前端编译工具有许多,比如 gulp、webpack 等等,Laravel 也为自己提供了开箱即用的编译工具,比如 Laravel5.3 及更早版本提供基于 gulp 的 Laravel Elixir 和从 Laravel5.4 开始提供基于 webpack 的 Laravel Mix,当然你也可以不使用官方提供的工具,自己去配置编译工具。这些编译工具的作用都是一样的,使用方法也大同小异。前面说过,本文第一次安装尽量简单,能运行即可,所以不再去配置前端编译工具,使用官方提供的即可。
访问项目

 

前为止,Laravel + Vue 已经完成了,下面开始引入 Element。

引入 Element
执行命令,安装 ElementUI

npm i element-ui -S

修改 resources/assets/js/app.js 文件

import Hello from './components/Hello.vue'; // 引入Hello 组件
import ElementUI from 'element-ui'; //这里已经直接引入所有的Element,其中的方法都可以直接额拿过来使用,不用再去单独加载
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

修改 Hello.vue 文件,使用 Element 组件
修改 resources/assets/js/components/Hello.vue 文件为

<template> <div><h1>Hello, laravel5.6 123</h1><el-button @click="visible = true">按钮</el-button><el-dialog v-model="visible"><p>欢迎使用 Element</p></el-dialog></div>
</template><script>
export default {data() {return {visible: false}}
}
</script><style>
.hello {font-size: 2em;color: green;
}
</style>

编译,运行

npm run dev

访问项目,点击按钮

 Laravel5.5.6 + Vue2 + Element 的环境搭建已经完成了,为了方便理解,第一次的搭建过程尽量简洁。本文下面的部分将使用 Vue 路由等等,逐步完善,便于后期的开发。

完善 CSRF 防护

环境搭建完成后,访问项目,打开开发者模式,切换到 Console ,会看到以下报错

在这里插入图片描述

请求伪造攻击(CSRF),自动为每一个有效用户会话生成一个 CSRF 令牌,该令牌用于验证授权用户和发起请求者是否是同一个人。

修改 resources/views/index.blade.php 文件为

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="csrf-token" content="{{ csrf_token() }}"><title>laravel</title>
</head>
<body><div id="app"></div><script src="{{ mix('js/app.js') }}"></script>
</body>
</html>

注:创建一个 meta 标签并将令牌保存到该 meta 标签中,问题可解决。

使用 Vue Router

构建大型项目时,使用 Vue Router 将是一个好的方式,它可以帮助你更好的组织代码,优化路由。

安装 vue-router
执行命令,安装 vue-router 版本控制在3.*内,高版本报错。

npm install --save vue-router@3.5.3

配置 vue-router
在 resources/assets/js 目录下新建目录 router ,同时在 router 目录下新建 index.js 文件

import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
export default new VueRouter({saveScrollPosition: true,routes: [ { name: 'hello',path: '/hello', component: resolve => void(require(['../components/Hello.vue'], resolve)) } ]});

引入 vue-router
在 resources/assets/js 目录下新建 App.vue 文件

<template> <div><h1>Hello, {{ msg }}!</h1><router-view></router-view> <!--路由引入的组件将在这里被渲染--></div>
</template><script>
export default {data() {return {msg: 'Vue'}}
}
</script><style>
</style>

修改 resources/assets/js/app.js 文件为

// import Hello from './components/Hello.vue';
import App from './App.vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-default/index.css';
Vue.use(ElementUI);
import router from './router/index.js';  const app = new Vue({el: '#app',router,render: h => h(App)  //将Vue的App.vue文件挂载到index.blade.php的id='app' 的文件中
});

重新编译

npm run dev

通过路由访问 hello 组件

件,只需在 resources/assets/js/components 目录下新建 vue 文件,在 resources/assets/js/router/index.js 文件里引入,然后就可以通过路由访问了。

代码拆分
代码拆分是将一些不经常变动的代码提取出来,以避免每次都要重新编译,如果你频繁更新应用的 JavaScript,需要考虑对 vendor 库进行提取和拆分,这样的话,一次修改应用代码不会影响 vendor.js 文件的缓存。

Laravel Mix 的 extract 方法可以实现这样的功能:

修改项目根目录下的 webpack.mix.js 文件

mix.js('resources/assets/js/app.js', 'public/js').sass('resources/assets/sass/app.scss', 'public/css').extract(['vue','axios']);

extract 方法接收包含所有库的数组或你想要提取到 vendor.js 文件的模块,使用上述代码作为示例,Mix 将会生成如下文件:

public/js/manifest.js  // Webpack manifest runtime
public/js/vendor.js  // vendor 库
public/js/app.js  // 应用代码

同时修改 resources/views/index.blade.php 文件为

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="csrf-token" content="{{ csrf_token() }}"><title>laravel</title>
</head>
<body><div id="app"></div><script src="{{ mix('js/manifest.js') }}"></script> <script src="{{ mix('js/vendor.js') }}"></script> <script src="{{ mix('js/app.js') }}"></script> </body> 
</html>

全局的 mix 函数会根据 public/mix-manifest.json 中的路径去加载对应的文件,同时也要注意引入三个 js 文件的顺序,以避免出错。

重新执行命令,就可以了。

npm run watch

完成

http://www.lryc.cn/news/62001.html

相关文章:

  • Python自动化sql注入:布尔盲注
  • Microsoft Defender for Office 365部署方案
  • 字节岗位薪酬体系曝光,看完感叹:不服真不行
  • 华为OD机试-高性能AI处理器-2022Q4 A卷-Py/Java/JS
  • Vue - 实现垂直菜单分类栏目,鼠标移入后右侧出现悬浮二级菜单容器效果(完整示例源码,详细代码注释,一键复制开箱即用)
  • NVM-无缝切换Node版本
  • CCF-CSP真题《202303-1 田地丈量》思路+python,c++满分题解
  • Autosar-软件架构
  • 8年测开年薪30W,为什么从开发转型为测试?谈谈这些年的心路历程……
  • 滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)
  • updateByPrimaryKey和updateByPrimaryKeySelective的区别
  • 【ARM Coresight 4 - Rom Table 介紹】
  • 11111111
  • JavaWeb——TCP协议的相关特性
  • 数据结构(C语言实现)——二叉树的概念及二叉树顺序结构和链式结构的实现(堆排序+TOP-K问题+链式二叉树相关操作)
  • OpenShift:关于OpenShift(OKD)通过命令行的方式部署镜像以及S2I流程Demo
  • 楔形文字的破解(钉子形文字)【文字破译原理:信息的相关性】
  • 【网络安全】文件上传绕过思路
  • MySQL数据库(2)
  • 2023年学什么编程语言,最容易找工作?
  • 4月23日,今日信息差
  • 【随笔四】JavaScript 中的 rest
  • maven作用讲解---以及怎么配置阿里的maven镜像
  • NXP公司LPC21xx+热敏电阻实现温度检测
  • Springboot信息泄露以及heapdump的利用
  • 淘宝天猫店铺新品如何运营?
  • Linux-给普通用户sudo权限
  • 小米13 Ultra:携光前行,追求每一束光的精确还原
  • 全志 Orange Pi相关网站集
  • js+css实现简单的弹框动画