laravel-admin表格table创建与展示分析

熊孩纸 阅读:154 2021-09-06 12:00:47 评论:0
本文章主要介绍了laravel-admin表格table创建与展示,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

在这里插入图片描述
代码如下:

public function form() 
{
    
    $form = new Form(new XXX()); 
    $form->text('name', '活动名称'); 
    $form->text('slug', '活动Slug'); 
 
    if ($form->isEditing()) {
    
        $form->datetime('created_at', '创建时间')->readonly(); 
    } 
 
    $form->table('xxx-json', '活动产品', function ($table) {
    
        $table->select('product_id', '产品')->options(function ($id) {
    
            $product = YYY::find($id); 
            return $product ? $product->pluck('pro_name', 'id') : []; 
        })->ajax('/admin/api/xxx-json'); 
 
        $table->select('type', '权益类型')->options(self::TYPES); 
        $table->number('value', '数值'); 
    }); 
 
    // $form->hidden('content');// 必须要有这个,否则会报错content字段不存在\vendor\encore\laravel-admin\src\Form.php Line:900 
 
    $form->table('content', '权益', function ($table) {
    
        $table->select('type', '类别')->options(self::OPTIONS); 
        $table->select('lang', '语言')->options(array_combine(Launch::LANGUAGES, Launch::LANGUAGES)); 
        $table->text('value', '值'); 
    }); 
 
    $form->datetimeRange('start_time', 'end_time', '活动时间'); 
    $form->select('status', '活动状态')->options(XXX::STATUS)->default(XXX::STATUS_VALID); 
    $form->select('style', '按钮样式')->options(XXX::STYLES)->default(XXX::STYLE_MORE); 
    $form->url('redirect', '跳转链接')->required(); 
 
    if ($form->isEditing()) {
    
        $form->url('link', '活动链接'); 
    } 
 
    // hook 保存后拿到活动id然后再次保存,没有观察者好用,但是不知道观察者为啥不可用 
    $form->saved(function (Form $form) {
    
        $activity = $form->model(); 
        $activity->link = vsprintf(config('app.url') . '/share/%s?activity_id=%d', [$activity->slug, $activity->id]); 
        $activity->save(); 
    }); 
 
    // 设置创建人 
    $form->hidden('created_by')->default(Admin::user()->id); 
 
    $form->footer(function ($footer) {
    
        // 去掉`查看`checkbox 
        $footer->disableViewCheck(); 
    }); 
    return $form; 
} 

编辑的时候展示:
在这里插入图片描述

更新代码,需要转换数据为json,并对字段进行一些处理:

public function update(Request $request) 
{
    
    $activity_id = $request->route()->parameter('activity'); 
    // Log::info('更新活动内容: ' . json_encode($request->all(), 320)); 
    // 如果存在pk说明是行内编辑 
    if ($request->pk) {
    
        $params[request('name')] = request('value'); 
    } else {
    
        $params = $this->validate($request, self::RULES); 
        // 过滤不需要的参数 
        foreach ($params as $field => $param) {
    
            switch ($field) {
    
                case 'content': 
                case 'products': 
                    $data = array_filter($params[$field], function ($value) {
    
                        // 只要没被移除的 
                        return isset($value['_remove_']) && !$value['_remove_']; 
                    }); 
                    $params[$field] = json_encode($data, 320); 
                    break; 
            } 
        } 
    } 
    // dd($params); 
    XXX::where('id', $activity_id)->update($params); 
    return admin_toastr('更新成功!', 'success'); 
} 

模型里面也需要处理一下:

<?php 
 
namespace App\Model\YYY; 
 
use Illuminate\Database\Eloquent\Model; 
 
class XXX extends Model 
{
    
    protected $connection = 'mysql_vip'; 
    protected $table = 'vip_activities'; 
    public $timestamps = true; 
    // 这里就是设置告诉设置的是json格式 
    protected $casts = [ 
        'content' => 'json', 
        'products' => 'json', 
    ]; 
 
    public const STATUS_VALID = 10; 
    public const STATUS_DELETE = 20; 
    // 状态10:正常,20:删除 
    public const STATUS = [ 
        self::STATUS_VALID => '正常', 
        self::STATUS_DELETE => '删除', 
    ]; 
 
    // 10:了解更多特权,20:立即体验 
    public const STYLE_MORE = 10; 
    public const STYLE_TRY = 20; 
    public const STYLES = [ 
        self::STYLE_MORE => '了解更多特权', 
        self::STYLE_TRY => '立即体验', 
    ]; 
 
    protected $fillable = [ 
        'name', 'slug', 'products', 'content', 'start_time', 'end_time', 'redirect', 'style', 'link', 'created_by', 'created_at', 'updated_at', 
    ]; 
 
    public function scopeHot($query) 
    {
    
        return $query->where('share_count', ' > ', 100); 
    } 
 
    public function scopeTrashed($query) 
    {
    
        return $query->where('status', self::STATUS_DELETE); 
    } 
 
    public function getContentAttribute($value) 
    {
    
        // array_values取值是为了避免覆盖 
        return array_values(json_decode($value, true) ?: []); 
    } 
 
    public function setContentAttribute($value) 
    {
    
        $this->attributes['content'] = json_encode(array_values($value)); 
    } 
 
    public function getProductsAttribute($value) 
    {
    
        // array_values取值是为了避免覆盖 
        return array_values(json_decode($value, true) ?: []); 
    } 
 
    public function setProductsAttribute($value) 
    {
    
        $this->attributes['products'] = json_encode(array_values($value)); 
    } 
} 
 

标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号