Laravel

分类下相关文章

Laravel Backpack Menu CRUD 的改造

MenuCRUD 非常不人性的地方是,新增一个节点是没有自动计算 left, right 属性,必须手动点击“重新排序”按钮,提交之后才能生成。 对于普通的用户,我都没有脸去解释为何要多点这两次按钮。所以,我决定改造 MenuCRUD。 很快找到了一个 laravel 的实现: https://github.com/lazychaser/laravel-nestedset 我才知道这货的学名是 nested set model 改起来异常简单: +use Kalnoy\Nestedset\NodeTrait; class MenuItem extends Model { us ...

阅读全文...

Laravel API 限速异常 HTTPException Too Many Attemps

最近线上 Laravel 错误日志发现了一个异常 HTTPException Too Many Attemps 而我一个同事在本地开发的过程中也频繁遇到这个异常。测试环境:Laravel 5.5。 网上查了一下,是 Laravel 5.2 引入的 throttle middleware 造成的。 源码参考 https://github.com/illuminate/routing/blob/master/Middleware/ThrottleRequests.php public function handle($request, Closure $next, $maxAttempts = ...

阅读全文...

修改 laravel backpack 的 search 功能以支持中文

backpack 的搜索功能有个致命缺陷,即对 created_at,updated_at 进行 like 操作,这样会造成搜索中文关键词时出现异常 Illegal mix of collations for operation 'like' 解决过程 find . -name AjaxTable.php ./v ...

阅读全文...

Laravel Model 的 fillable (白名单)与 guarded (黑名单)

例如 protected $fillable = ['name']; protected $guarded = ['price']; 定义了 name 字段可以写入/修改,而 price 字段不可以。 需要注意的是,fillable 与 guarded 只限制了 create 方法,而不会限制 save。 我觉得 Laravel 这样设计的原因是,create 通常是使用 request 中的所有请求参数来创建对象,而 save 则是一个字段一个字段的手动赋值,所以 create 有可能会恶意加入不应该插入的字段,例如 is_admin。基于此,create 还是需要有 fillable, ...

阅读全文...

Laravel 的计划任务真是比 Linux 系统的 crontab 方便多了

例如,我想加一个新功能,24小时内未支付的订单自动变更状态。以前都是通过系统 crontab 定时执行,但是缺点很明显。每次都需要手动配置 crontab,不方便在项目中集中管理。 看了一下 Laravel 的 scheduling 确实方便不少。 避免并发执行 $schedule->command('emails:send')->withoutOverlapping(); 这里需要注意,对于 call function 定义的计划任务,需要定义 name。否则会报错 production.ERROR: A scheduled event name is required to ...

阅读全文...

Laravel DB::transaction 的传参陷阱 - PHP 匿名函数

今天在使用 Laravel 的事务的时候,一直报变量未定义的错误 $order_id = 12; DB::transaction(function () { $tmp = $order_id; }); Undefined variable: order_id 仔细一看,才发现这是个匿名函数 匿名函数 所以正确的使用方式是 $order_id = 12; DB::transaction(function () use ($order_id) { $tmp = $order_id; }); 参数写在哪里,第一个括号还是第二个括号 这是第二次见到 PHP 的匿名函数,所以比较新鲜。。 ...

阅读全文...

服务端 Laravel 异常日志自动发送到邮件中

Laravel 没有像 Django 一样内置发送异常邮件的功能,而这个功能非常实用,特别是 服务比较多的情况下,不可能每个服务都去线上查看日志 节假日可以及时接收服务异常信息 环境 Laravel 5.5 具体的代码实现,参考下面的一个链接里的文章。 163 邮箱的配置 .env 配置 MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=25 MAIL_USERNAME=xxx@163.com MAIL_PASSWORD=xxx MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=xxx@163.com MAIL_ ...

阅读全文...

为三方 Laravel Package 增加 locale 语言包

例如,模板文件中有一个翻译 trans('backpack::base.logout') 但是没有对应的 zh-CN 翻译。 如何添加对应的翻译? 对应的路径是什么? 加上了 backpack:: 前缀,代表了什么? 文件夹? 代表的是 package 名 例如,有些包自带了语言包,但是又遗漏了我们需要的语言,例如 zh-CN, 而我们有时来不及提交 git patch,又不能直接修改 vendor 下的文件。 那么,解决方案就是,在 resources/lang/vendor/{package}/{locale} 目录下,加上对应的翻译即可。 翻译获取的方法 两种用法 {{ __('me ...

阅读全文...

Laravel 5.5 安装 laravel-wechat 4.0 版本失败

开发环境 Laravel 5.5 按照 github 的安装文档,安装最新的 4.0 版本 composer require "overtrue/laravel-wechat:dev-master" 报错 ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an inst ...

阅读全文...

Laravel Admin 折腾之旅 - Voyager

早晨蹲坑的时候,在 reddit 上看到 voyager 发布了 1.0 版,这是个与 Laravel backpack 类似的 Admin 方案。 于是早上过来安装 voyager 尝试了一下 几点感触 非常类似 Wordpress 的后台 数据表的管理在 admin 后台进行,比 backpack 方便很多,但是细节上的调整还是要使用 mysql 客户端。例如,字段位置,索引等 关联表管理非常简单,点选即可。但是问题和 Backpack 一样,都不支持外键关联表的多字段显示。例如,一个订单表,关联了用户信息,要同时显示用户姓名和手机号,就无法实现。只能显示用户的一个字段。 内置功能非常完 ...

阅读全文...

Laravel Backpack 上传图片自动保存至七牛

默认 Backpack 上传的图片是保存到本地,但是现实场景中都是用 CDN 存储图片,以提升用户体验。所以就需要改造上传的流程,这里用到了 Laravel 七牛的接口实现。 根据 Backpack 文档的说明,需要在 mutator 中进行改造。 参考 Laravel 文档,https://laravel.com/docs/5.3/eloquent-mutators#defining-a-mutator Mutator 名词,增变基因 To define a mutator, define a setFooAttribute method on your model where Foo i ...

阅读全文...

Laravel db:seed 报错 [ReflectionException] Class XXX does not exist

修改了 Laravel Backpack Settings 自带的 seeder 导入测试数据时,报错 php artisan db:seed --class=SettingsTableSeeder [ReflectionException] Class SettingsTableSeeder does not exist 解决方法 composer dump-autoload dump-autoload 是 composer 的一个命令,与 laravel 无关。 ...

阅读全文...

Laravel 自定义创建时间、更新时间字段

Model 中,如果启动了 timestamps public $timestamps = true; 默认,laravel 会操作对应数据表的 created_at, updated_at 字段。 但是,有时由于是历史遗留项目,对应的数据库字段名不是 created_at, updated_at 就需要指定字段。例如 const CREATED_AT = 'created'; const UPDATED_AT = 'updated'; public $timestamps = true; 测试环境 Laravel 5.4 ...

阅读全文...

修改 laravel 的 locale 使对应语言包生效

使用 laravel backpack 作为 laravel admin 时,发现不知道如何修改界面的语言。其官方的文档中也没有找到对应的说明文档,于是猜测可能是 laravel 的配置,与三方包没有关系。测试了一下,果然如此 例如,要将默认的英文语言包切换为简体中文,需修改 config/app.php 中的配置 'locale' => 'zh-CN', 而 backpack 并没有简体中文的语言包,于是 copy 了一份繁体中文的语言包到 zh-CN 目录下,例如 resources/lang/vendor/backpack/zh-CN 刷新一下页面,就能看到对应的翻译生效了。 ...

阅读全文...

Laravel 5.4 新特性

Laravel 的版本迭代还真是快,5.3 我还没升级完,5.4已经发布了。 粗略扫了一下 Laravel 5.4 的新特性,还是不少亮点 Laravel Dusk 一套用于界面交互测试的工具。比较适合做功能性的冒烟测试。 Laravel Mix Laravel Elixir 的升级替代品,使用 webpack 替换掉了 gulp。最近刚接触的 Sage 9 新版本也是用 webpack 替换掉了 gulp, 虽然我不太明白为何 gulp 这么好用的东西这么快就被淘汰了,但是从上手程度来看,webpack 并不陡峭。 其他新特性 Blade Components and Slots Mark ...

阅读全文...