帮助方法
Laravel中的帮助方法无法重写,如果要重写,只能自己单独写放在
app/helpers.php
里面去,还需要在composer.json
中添加配置:1
2
3
4
5
6"autoload": {
...
"files": [
"app/helpers.php"
]
}
数组和对象
1 | # 返回第一个或最后一个元素 |
Laravel中的帮助方法无法重写,如果要重写,只能自己单独写放在app/helpers.php
里面去,还需要在composer.json
中添加配置:
1 | "autoload": { |
1 | # 返回第一个或最后一个元素 |
在app/Http/Kernel.php
中,$middleware
表示全局中间件,而$routeMiddleware
表示针对某个路由的中间件,所以只需要把csrf在$middleware
中注释掉,然后在$routeMiddleware
中添加'csrf' => 'App\Http\Middleware\VerifyCsrfToken'
如果要在某个路由上使用就这样:
1 | Route::group(['middleware' => 'csrf'], function(){ // csrf保护的接口 |
可以在app/Http/Middleware/VerifyCsrfToken
的$except
添加,但是这里的添加只能以正则的方式来匹配,不能使用路由别名,如果路由中有参数可以用星号代替
1 | protected $except = [ |
由于csrf
的_token
是存储于session的,依照laravel
的实现机制,同一时间只能有一个_token
,所以无法实现一个页面设置多个csrf token
,要解决这个问题要么将非必要的接口忽略csrf
,要么每次请求api
后从后台生成并返回一个新的token
在需要这个效果的时候首先在npm仓库找到了vue-dragscroll
库,但是应用在我们自己项目上的时候拖动起来却非常慢,元素跟不上鼠标的移动速度,无奈,就自己简单的实现了一个拖拽指令:
1 | import Vue from 'vue' |
由于我们项目使用了是Nuxtjs
,如果完全由后端渲染,是无法在document
上进行事件监听的,所以在nuxt.config.js
中这样定义插件:
1 | plugins: [ |
最后可以在任何元素上应用该指令:
1 | <div dragscroll><img /></div> |
最终的结果类似这样
el-row
和el-col
可以搭配实现24格的栅格布局
el-row
支持如下属性
参数 | 含义 | 说明 | 可选值 | 默认值 |
---|---|---|---|---|
gutter | 每两个栅格之间的间隔(单位是px) | number | - | 0 |
type | 布局模式 | string | - | - |
justify | flex布局下的水平排列方式 | string | start/end/center/space-around/space-between | start |
align | flex布局下的垂直排列方式 | string | top/middle/bottom | top |
tag | 自定义元素标签 | string | * | div |
el-col
支持如下属性参数 | 含义 | 说明 | 可选值 | 默认值 |
---|---|---|---|---|
span | 栅格占据的列数 | number | - | 24 |
offset | 栅格左侧的间隔格数 | number | - | 0 |
push | 栅格向右移动格数 | number | - | 0 |
pull | 栅格向左移动格数 | number | - | 0 |
xs | <768px 响应式栅格数或者栅格属性对象 |
number/object (例如: {span: 4, offset: 4}) | — | — |
sm | ≥768px 响应式栅格数或者栅格属性对象 |
number/object (例如: {span: 4, offset: 4}) | — | — |
md | ≥992px 响应式栅格数或者栅格属性对象 |
number/object (例如: {span: 4, offset: 4}) | — | — |
lg | ≥1200px 响应式栅格数或者栅格属性对象 |
number/object (例如: {span: 4, offset: 4}) | — | — |
xl | ≥1920px 响应式栅格数或者栅格属性对象 |
number/object (例如: {span: 4, offset: 4}) | - | - |
tag | 自定义元素标签 | string | * | Div |
栅格布局一般会根据实际的各个分辨率下的情况来设置每个布局的宽度,如果想要直接换行,也可以某一种分辨率之和超过24,这样只要两个col
超过24就会换行,例如:
1 | <el-row :gutter="24"> |
这个周末有点闲暇时间,老婆在我身后准备期末考试(回老家一人一张书桌),所以我准备做个年终总结。因为疫情、老婆怀孕、换工作,所以年初的计划基本全部被打乱了。
万万没想到在上家公司的最后半年会这么累,不过也还好,这让我蓄谋已久的离职也变得顺理成章了。本来上家公司的工资一直很低,但好在工作清闲,所以虽然我一直说要离职,但始终没有下定决心。不过由于公司内部调整,阴差阳错地进入了一个业务部门。我实在无法适应大公司的业务部门,仅用半个月的时间就超过了我过去三年所有的加班时间,并且周末还得时刻神经紧绷,因为公司的问题电话会随时打给你,哪怕问题和你根本没半毛钱关系,你也得拿出电脑去解决。那种感觉是我再也不想经历的。所以,在请完婚假后第一天就去提交离职申请了。年初我就计算过,今年产检、年假、婚假、产检、离职、疫情,可能往后几十年,就数今年的假期最多了,不过假期多也没什么用,因为老婆假期不多,即使婚假也得在家复习。所以我过了所有人都无法想象的婚假: 在家撸代码。
去年年底由于工作安排,强迫学习了Java,基本达到了能熟练开发Java项目的地步。不过由于那边业务比较单一历史框架死板,所以也没遇到多少技术难题,加班主要是因为任务太紧。6月底至今在新公司,全栈开发岗位,不过大部分是前端Vuejs + Nodejs,所以前面两周也很累的,每天下班后都需要恶补一下前端知识。但远程工作好的地方是不加班,以后我会详细介绍远程工作的爽与不爽。几周过去,也算是入门前端了,基本能够配合框架快速实现想要的效果了,也渐渐地开始尝试看Vue源码,因为总感觉自己的前端代码写得有点low。不出意外,下半年在技术上主要是针对前端和AWS的深入学习了。对了,新公司基本是用英语交流的,所以英语学习也至关重要;据老板说转正后每周有和外国友人直接语音交流的机会,不过在一群高手面前,转正还得继续努力💪。
一方面因为换到了远程工作且新工作不给买社保,所以上半年一直在研究社保和个人所得税方面的问题,现在的我自我感觉算是半个这方面的专家了。现在,我是以个人身份参加了职工医保和养老保险,算下来一个月一千多,不用说,肯定公司帮忙交划算,不过个人如果不用其它险种和公积金,这样交才是最划算的。
另一方面,家里要迎来新成员了。做了好多的计划,买了好多的东西,本来6月份因为多干了一些活儿多几千块收入,但是618买一波母婴用品花得干干净净的。第一次知道他们为啥被称为“四脚吞金兽”了。唯一让我压力小点的就是有极大的可能是女儿,我那时相当高兴的呀。虽然我积攒已久的育儿经验都得改一下,但是女孩子的话是真的真的好轻松,感谢老婆!
为什么要用nuxt.js
,主要就是因为它可以服务端渲染(SSR),相比于传统的vue单页应用,将渲染放到服务器这边,性能肯定能得到很大提升,并且首次加载无需加载特别大的资源,且对搜索引擎友好,所以没有什么理由不用它。
assets
: 资源目录,用于组织未编译的静态资源
components
: 组件目录
layouts
: 布局目录
middleware
: 中间件目录
pages
: 页面目录
plugins
: 插件目录
static
: 插件目录,会被直接映射到根目录下,可以放置favicon.ico/robots.txt
等文件
store
: 用于组织应用的vuex
状态树文件
nuxt.config.js
: 个性化配置文件
Spring Initializr:Spring项目初始化工具。
打包成war: mvn clean package
调用顺序
Controller –> Service Interface –> Service Impl –> Dao Interface –> Dao Impl –> Mapper –> DB
Service(业务逻辑,可以建立子文件夹来进行分类,这样每个biz就可以更细分,如果Biz和Servic都单独作为一层,那么Biz的粒度更细,Service
则是提供给别人的接口)、Schedule(定时任务)、Common(一些中间件认证登录等)、Manager、RPC Service、MQTask、JobTask。也有Service和BIZ平行的分层方式,这种情况,一般是Service在调用Biz,Biz执行数据库操作,类似于Manager。
BO(Business Object)
一些公共的对象,公共的抽象类、公共的异常、公共的帮助方法等
一般是由MyBatis等工具自动生成的。
DO/PO(Data Object/Persistant Object,与数据表直接对应,也叫Entity层或者Model层):用于存放实体类,与数据库中的属性值保持一致。
Mapper: 对数据库进行数据持久化操作,它的内部方法就是直接对数据库进行操作的。它类似于manager层。可以封装对数据库的复杂的操作。
VO(value object,类似于将数据库的字段抽象为新的业务相关的字段): VO往往用于请求处理层,即Controller。
外部系统的一些接口
Controller、Config(一些初始化配置,例如线程池、缓存池等配置的初始化)
npm install -g @vue/cli && vue create my-project
可以在new Vue
之前使用window.函数名=function() {}
创建一个全局的函数方法
在vue
中使用bootstrap
可以直接用BootstrapVue
,如果要单独安装可以这样做:npm install --save bootstrap jquery popper.js
,然后在main.js
中加入即可
1 | import 'bootstrap/dist/css/bootstrap.min.css' |
1 | const CopyWebpackPlugin = require('copy-webpack-plugin'); |
a ? a : b
,最好用{a || b}
来代替1 | // v-bind |
建议安装Mybatis-plus
Mapper.xml
文件是真实的SQL语句对应关系MyBatis
生成的DAO
层文件目录如下:
1 | . |