2018-06-06 hooook 分享

Laravel admin 使用经历

php.ini

遇到的情形

在做《驾考题库》小程序的时候,遇到的问题,后台需要上传视频,本地可以上传,但是线上服务器始终上传失败。

根据报错,在 issues 上找到的的答案

https://github.com/z-song/laravel-admin/issues/2018
断定配置文件中上传文件大小做了限制

cli 形式的 php.ini 配置
image.png
cli 形式的 php.ini 配置
image.png
需要更改的配置
2018-06-06 hooook 分享_第1张图片
image.png

模型表单--ignore

有的时候再模型表单里面需要忽略掉一些不存在与数据库,或者不需要的字段,会用到 $form->ignore(['column1', 'column2', 'column3']);,但是要在保存回调里面再次用到组装或者拼接呢?

https://github.com/z-song/laravel-admin/issues/1711

三种情况
  • ignore 的字段,在保存回调中的获取的办法 request('field')
  • 没有被 ignore 的字段,在保存回调中的获取的办法 $form->field
  • 取到值之后,再去设置值,$form->model()->setAttribute('field', 'value')

模型表单--listbox

在后台使用过程中,listbox 用作多对多模型,比如一篇文章(article)可以有多个标签(tag),一个标签也可以属于多个文章。

使用方法
$form->listbox($column[, $label])->options([1 => 'foo', 2 => 'bar', 'val' => 'Option name']);
我在项目中遇到的痛点

一个活动专题下面,有多个商品,但是活动专题页面分版块,就是一个活动专题下,有限拍区,还有秒拍区,每个区下面有多个商品。于是在中间表中加了一个字段 theme_type 来做区分。

2018-06-06 hooook 分享_第2张图片
image.png

但是在后台用到 listbox 方法就需要额外的处理了

$form->saving(function (Form $form) {
    $form->top_products = collect($form->top_products)->filter()->mapWithKeys(function($item){
        return [$item => ['theme_type' => 0]];
    })->all();
    $form->bottom_products = collect($form->bottom_products)->filter()->mapWithKeys(function($item){
        return [$item => ['theme_type' => 1]];
    })->all();
});

模型表单-- 文件/图片上传

'disks' => [
    ... ,

    'admin' => [
        'driver' => 'local',
        'root' => public_path('uploads'),
        'visibility' => 'public',
        'url' => env('APP_URL').'/uploads',
    ],
],

这是 laravel admin 官网配置示例,文件位于 config/filesystems.php,在此建议改为

'root' => public_path('/storage'),

因为我们的项目大部分用的是 laravel 5.5 ,在使用 deploy 部署的时候,默认会有共享文件夹和文件

// Laravel shared dirs
set('shared_dirs', [
    'storage',
]);
// Laravel shared file
set('shared_files', [
    '.env',
]);

把文件上传到storage可以方便改写权限,也不用把上传的图片加入到版本控制当中。

你可能感兴趣的:(2018-06-06 hooook 分享)