使用Route macro来定义Route的新方法

使用 Laravel 在做后台表单操作时,通常会增加一个批量删除的功能 起初是在 route 里定义一个新的 delete Route::delete('prefix/destroy-selection', 'CurrentController@destroySelection); 之后再定义 apiResource Route::apiResource('prefix', 'CurrentController'); 这样写十分啰嗦且冗长,Laravel 的强大之处就是它提供了 Macro 来扩展功能 在 AppServiceProvider 的 boot 方法里加入 Route::macro('full',function ($prefix, $controller){ Route::delete($prefix.'/destroy-selection', $controller.'@destroySelection')->name($prefix.'destroy-selection'); Route::apiResource($prefix, $controller); }); 之后在 route 里就可以直接使用 full 来定义了 Route::full('prefix', 'CurrentController');

十一月 6, 2018

如何在 Vue Spa 中使用微信jssdk分享接口

在Vue Spa项目中,使用了 History 模式,要使用分享接口,只能在第一次访问的时候,就加载jssdk配置,通过Vue router进入其他页面之后再做加载,虽然在调试模式下依然会显示配置正确,但是分享接口是无效的,那么怎么办呢?直接在App.vue下就做jssdk config 实现步骤 编写后端接口 使用了 overture/wechat public function jssdk(Request $request) { $this->jssdk->setUrl($request->input('url')); return $this->jssdk->buildConfig([ 'onMenuShareAppMessage', 'onMenuShareWechat', 'onMenuShareTimeline', 'getLocation' ], false); } 在App.vue中注入配置 引入wexin-js-sdk const wx = require('weixin-js-sdk') 方法 async getJssdk () { const { data } = await this.$axios.post('/api/wechat-work/jssdk', { url: window.location.href }) wx.config(data) } 在分享页面中编写分享方法 引入wexin-js-sdk const wx = require('weixin-js-sdk') 在__mounted__里写入分享方法 wx.ready(() => { const self = this wx.onMenuShareTimeline({ title: self.shareTitle, link: window.location.href, imgUrl: self.logoPath, success: function () { self....

十月 9, 2018

image-webpack-loader resolve jpg file wrong in ubuntu server

In my production Ubuntu server which version is 16.04.3 LTS,after push my code to it,I run yarn prod but it show me a error notice ERROR in ./resources/assets/js/mobile/pages/Home/images/banner-oath.jpg Module build failed: Error: write EPIPE at _errnoException (util.js:992:11) at WriteWrap.afterWrite [as oncomplete] (net.js:864:14) after search by google,this link solve my problem install libpng16-dev in server sudo apt-get install libpng16-dev then, it is all fine.

八月 2, 2018

laravel echo server 结合 jwt 授权

首先,因为重写了 axios 的拦截器,为了确保 socket 消息头的引入,在 axios 拦截器中中加入 if(window.Echo) { let socketId = window.Echo.socketId() if (socketId) { request.headers.common['X-Socket-Id'] = socketId } } 然后,修改BroadcastServiceprovider,修改认证路由为api模组 Broadcast::routes(["prefix" => "api", "middleware" => "api"]); 最后,在 laravel-echo-server.json 中确保认证路由的正确 { "authHost": "http://dev.test", "authEndpoint": "/api/broadcasting/auth" } 同时,在 Laravel Echo中加入token认证 import Cookies from 'js-cookie' let token = Cookies.get('token') window.Echo = new Echo({ broadcaster: 'socket.io', host: process.env.MIX_ECHO_SERVER, auth: { headers: { 'Authorization': 'Bearer ' + token } } }) 好了,我们现在可以愉快的使用 laravel 发送广播了,私有频道在 routes/channels....

五月 17, 2018

使用Sortable.js和Vue.Draggable的一些坑

Sortable.js 是拖拽列表最著名的库,而 Vue.Draggable 是其在 Vue 中的封装,在 vue 中引入十分的方便。 但是我在项目中的需求是左侧列表初始时是空的,从右侧列表拖动到左侧生成,这就造成了一个问题,左侧因为没有dom节点而拖不过来,这时就需要在左侧的 draggable 组件添加一个 min-height 的 css 属性。 另一个问题是,在使用 clone 模式时,因为 js 对象都是指向同一个指针的,再从右侧拖动到左侧的节点,当修改其属性时,把所有拖拽过来的相同节点也都修改了。 我的解决方法是,把右侧改为 pull 模式,同时使用 vue 的 watch,当右侧的列表发生变化时重新生成,这样就和初始化的对象完全脱离了。

五月 17, 2018

在vue中使用viewerjs

在 vue中使用viewerjs 必须执行 viewer.update const viewer = new Viewer(this.$refs.image) this.$nextTick().then(() => { viewer.update() }) viewer.view(0) 当然最后别忘了引入css @import "~viewerjs/dist/viewer.css";

四月 22, 2018

Laravel Elixir使用webpack打包只引入moment.js的中文语言包

方法是使用webpack内置的ContextReplacementPlugin插件 修改_gulpfile.js_ 先引入webpack const webpack = require('webpack') 增加自定义webpack配置 elixir(mix => { Elixir.webpack.mergeConfig({ plugins: [ new webpack.ContextReplacementPlugin(/moment[\\/]locale$/, /^\.\/(zh-cn)$/) ] }); 之后运行 gulp 会发现打包之后的js会明显变小

二月 8, 2018

Laravel 执行定时任务时的url域名

在laravel开发时,我最常用的url函数是route,因为根据route函数生成的url如果命名路由写错了那么直接会报错,这样有问题能早发现。 在生成定时任务的时候,在console里,我也写了route,但是推送到用户的地址却是localhost,这可太奇怪了,于是翻了laravel的源代码 laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php public function bootstrap(Application $app) { $url = $app->make('config')->get('app.url', 'http://localhost'); $app->instance('request', Request::create($url, 'GET', [], [], [], $_SERVER)); } 原来是因为走定时器任务时是在命令行里执行的,laravel无法根据用户的输入而得到域名,那么就必须读取配置文件了 当然在 .env里定义是最佳实践了

一月 30, 2018

用wakatime来统计coding信息

wakatime的主页 目前支持绝大部分主流的编辑器和IDE 我把phpstorm、vim、datagrip、sublime和zsh都装上了wakatime的插件 装完了之后,就啥也不用管了,wakatime会自动把你的coding信息传到他的服务器,然后做成漂亮的图表来展示 他还有一个coding time的排行榜 蛤,我在哪? 每个人的主页上,会详细展示语言、编辑器和操作系统使用时间的百分比 比如 我的主页

九月 6, 2017

在Arch上使用Laravel valet

valet-linux的github地址 valet默认是使用NetWorkManager来管理dnsmasq的,不过我是用netctl来管理网络的,所以默认安装后ping foo.app并不能指向127.0.0.1 那么就直接用dnsmasq了 $ sudo vim /etc/dnsmasq.conf 修改listen-address和address listen-address=127.0.0.1 address=/app/127.0.0.1 address=/dev/192.168.10.10 指向dev的是homestead的ip,valet的默认domain修改为app 修改 /etc/resolv.conf 将 nameserver 127.0.0.1 加到最上面 使用 $ sudo chattr +i /etc/resolv.conf 为其加锁,最后别忘了用systemd将dnsmasq自动启动 $ sudo systemctl enable dnsmasq valet-linux其他的使用按照github wiki上的操作即可,目前没有发现什么异常

五月 13, 2017