使用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

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

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

在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

开发Laravel时必备的三个包

barryvdh/laravel-debugbar 作用是页面底部显示丰富的调试信息 安装 $ composer require barryvdh/laravel-debugbar config/app.php注册ServerProvider Barryvdh\Debugbar\ServiceProvider::class, 增加Facades 'Debugbar' => Barryvdh\Debugbar\Facade::class, barryvdh/laravel-ide-helper 生成一个php文件,为IDE提供更好的支持 安装 $ composer require barryvdh/laravel-ide-helper config/app.php注册ServerProvider Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, 使用 如果使用的是Homestead,ssh登录虚拟机后,在虚拟机执行,否则会找不到数据库而报错 sven/artisan-view 使用artisan命令生成视图文件 安装 $ composer require sven/artisan-view config/app.php注册ServerProvider Sven\ArtisanView\ArtisanViewServiceProvider::class, 使用 生成视图 $ php artisan make:view index 生成目录下的视图 $ php artisan make:view pages.index

一月 17, 2017