多图上传效果
多数据存储
先说多图上传实现
官方提供了多图上传组件
$form->multipleImage($column[, $label]);
// 本例中字段是imgurl,所以添加如下代码
$form->multipleImage('imgurl', __('商品图片'));
文档里还说明了,只是添加一个multipleimage方法是不行的,还需要再对应的模板里定义存储格式,本例是Good模板中添加
public function setPicturesAttribute($pictures)
{
if (is_array($pictures)) {
$this->attributes['pictures'] = json_encode($pictures);
}
}
public function getPicturesAttribute($pictures)
{
return json_decode($pictures, true);
}
注意,如果是添加上面的代码,是会报错的! 文档中没有说明:方法名必须要与字段对应起来!
意思就是,这里的setPicturesAttribute() 要修改成 setImgurlAttribute() ,里面的['pictures'] 也同步修改为['imgurl']
完成上述修改后,才能正常上传
同理,批量添加数据,也需要做类似处理
首先这里用到的是laravel-admin的 From JSON组件 这里的字段名称是size 在model里也要注意修改官方文档中默认的方法名
$form->table('size', function ($table) {
$table->text('sizes', __('规格大小'));
$table->text('colors', __('颜色分类'));
$table->text('sales', __('价格'));
});
官方默认是 getColumnNameAttribute() 这里需要修改为这里的 getSizeAttribute()
public function getSizeAttribute($value)
{
return array_values(json_decode($value, true) ?: []);
}
public function setSizeAttribute($value)
{
$this->attributes['size'] = json_encode(array_values($value));
}
最后,在 “显示” 页面中还是会报错
官方文档里没有看到处理办法,这里就自己做了下处理,将数组拆分成字符串后显示,如下:
$show->field('size', __('Size'))->as(function (){
// 如果size内容是数组则进行处理
if (is_array($this->size)){
$str = '';
// 遍历数组
foreach($this->size as $v){
// 如果内部仍是数组(当前是二维数据),则拆分成字符串并追加到str中
if (is_array($v)){
$str.= implode('-',$v).',';
}else{ // 否则直接追加到str中
$str.=$v;
}
}
return $str;
}
});