Laravel admin框架踩坑记录

一、config()可以获取到config文件夹下定义的文件当中的值。例如

config下的common.php中:

<?php
return [ 'rel' =>[ '1' => 'default', '2' => 'warning', '3' => 'success' ], ];
//调用
$config=config('common.rel');
//输出
'1' => 'default', '2' => 'warning', '3' => 'success'  

注意:在common.php中更改过之后需要在composer执行

php artisan config:cache

作用是清除缓存,这样才可以获取到值,不然的话获取的值为null。


二、通过数据库中已有的数据,运算得到新数据,追加到显示页面。例如已知单价和数量,自动运算出总金额。

计算出总金额

controller中

$grid->column('price', __('TaskReleases.Price'));
$grid->column('task_count', __('TaskReleases.Task count'));
//总金额
$grid->column('total_price', __('TaskReleases.Count')); 

model 首先要定义追加的字段名,然后设置laravel 获取器

protected $appends = ['total_price'];
//金额自动运算,单价*数量
public function getTotalPriceAttribute(){
    return $this->price*$this->task_count;
}

详细讲解:https://www.cnblogs.com/zqblog1314/p/12877152.html


三、多图上传及点击放大功能的实现

上传多图:

添加修改方法:

// 本例中字段是imgurl,所以添加如下代码
$form->multipleImage('imgurl', __('商品图片'));

model

public function setPicturesAttribute($pictures)
{
    if (is_array($pictures)) {
        $this->attributes['pictures'] = json_encode($pictures);
    }
}
public function getPicturesAttribute($pictures)
{
    return json_decode($pictures, true);
}

原理为获取器,注意函数名要遵循驼峰式命名,不能出现下划线_

点击放大功能

composer安装扩展

composer require laravel-admin-ext/grid-lightbox

php artisan vendor:publish --tag=laravel-admin-grid-lightbox

配置
打开config/admin.php,将属于此扩展的配置添加到extensions部分。

'extensions' => [ 'grid-lightbox' => [
     // Set to `false` if you want to disable this extension 
    'enable' => true,
 ] ]

controller中:

$grid->image(__('TaskRecord.Image'))->lightbox(['width' => 50, 'height' => 50]);

四、有表连接时的添加修改或者筛选

form方法:

$type = TaskType::pluck('tname','id');
$form->select('type', __('TaskReleases.Type'))->options($type)->rules('required');

筛选:

$grid->filter(function($filter){
    $type = TaskType::pluck('tname','id');
    // 在这里添加字段过滤器
    $filter->equal('type', __('TaskReleases.Type'))->select($type);
});

五、行操作,添加新的操作按钮

参考 https://laravel-admin.org/docs/zh/1.x/model-grid-custom-actions
Examine.php

namespace App\Admin\Actions\Product;
use Encore\Admin\Actions\RowAction;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
class Examine extends RowAction
{
    public $name = '审核';
    public function handle(Model $model, Request $request)
    {
        $model->status          = $request->input('status');
        $model->reason          = $request->input('reason');
        $model->statustype      = 2;//2为人工审核
        $model->update();
        return $this->response()->success('审核成功')->refresh();
    }
    public function form(Model $model)
    {
        $this->radio('status', '审核')->options([1 => '通过', 2 => '拒绝'])->rules('required');
        $this->text('reason', '审核原因')->rules('required');
    }
}

TaskReleasesController .php

//首先引用类
use App\Admin\Actions\Product\Examine;

$grid->actions(function ($actions) {
    // 通过状态信息添加操作按钮
    if(0==$actions->row->status){
        $actions->add(new Examine());
    }
});

六、回调函数

官方文档 https://laravel-admin.org/docs/zh/1.x/model-form-callback

$form->saved(function (Form $form) {
    $code = $form->model()->id;
    $now_task=$form->model()->task_count;
    DB::table('task_releases')->where('id',$code)->update(['now_task' => $now_task]);
});

七、配置问题

数据库

后台

显示效果
  $grid->column('task_demand', __('TaskReleases.Task demand'))->display(function($taskdemand) {
            $demand=DB::table("config")->where("group","=","任务要求")->pluck("name","value")->toarray();
            $str = '';
            if($taskdemand){
                foreach($taskdemand as $tid){
                    $str .=$demand[$tid]." | ";
                }
                $str = trim($str," | ");
            }
            return  $str;
         });      

八、DB查询

DB类之查询:

2、满足条件的第一列获取:DB::table("表名")->where("name",">","1")->first();
3、满足条件的全部字段:DB::table("表名")->where("name",">","1")->lists("title");
4、满足条件的单一字段:
DB::table("表名")->where("name",">","1")->pluck("title");//返回二位字段值数组
 DB::table("表名")->where("name",">","1")->pluck("title","name");//返回二位字段值数组 第二个参数指定key
5、分块查询数据列:
DB::table("表名")->chunk(100,function($users){
    //$users to do $user是table中2行一次查询的结果
    //return false; 停止处理接下来的数据
})
6、指定查询字句:DB::table("表名")->select("name","email")->get();
7、增加查询子句到已有查询中:$query=DB::table("表名")->select("name","email");$query->addSelect("age")->get();
8、条件查询where和orWhere:DB::table("表名")->where("name",">","10")->orWhere("titile","=","0")->get();
9、条件查询whereBetween和whereNotBetween:DB::table("表名")->where("name",">","10")->whereBetween("titile","=","[0,10]")->get();
10、条件查询whereIn:DB::table("表名")->where("name",">","10")->whereIn("titile","[1,2,3]")->get();
11、条件查询whereNull:DB::table("表名")->where("name",">","10")->whereNull("titile")->get();//未配置的值
12、条件查询where Clauses:DB::table("表名")->where("name",">","10")->whereNameAndTitle("name",titile")->get();
13、排序(Drder By),分群(Group By)及 Having:$users=DB::table("users")->orderBy("name","desc")->groupBy("count")->having("count",">",100)->get()
14、偏移(Offset)及 限制 (Limit)$users=DB::table("users")->skip(10)->take(5)->get();

九、富文本编辑器

安装参考https://www.cnblogs.com/fogwang/p/11781191.html
富文本使用

$form->ueditor('content', __('ArticleContent.Content'))->rules('required');

detail方法中需要设置禁止转义
官方文档https://laravel-admin.org/docs/zh/2.x/model-show#%E5%86%85%E5%AE%B9%E8%BD%AC%E4%B9%89

$show->field('content', __('ArticleContent.Content'))->unescape();

十、模型表单布局

$form = new Form(new Document);
// 第一列占据1/2的页面宽度
$form->column(1/2, function ($form) {
    // 在这一列中加入表单项
    $form->text('title', __('Title'))->rules('min:10');
    $form->textarea('desc', __('Desc'))->required();
    $form->select('uploader_id', __('Uploader'))
        ->options(User::all()->pluck('name', 'id'))
        ->rules('required');
    ;
    $form->file('path', __('Path'))->required();
});
// 第二列占据右边1/2的页面宽度
    $form->column(1/2, function ($form) {
    $form->number('view_count', __('View count'))->default(0);
    $form->number('download_count', __('Download count'))->default(0);
    $form->number('rate', __('Rate'))->default(0);
    $form->radio('privilege', __('Privilege'))
        ->options(Document::$privileges)
        ->stacked()
        ->default(1);
    $form->datetimeRange('created_at', 'updated_at');
});
return $form;

十一、laravel-admin图表

安装图表扩展

composer require laravel-admin-ext/chartjs
php artisan vendor:publish --tag=laravel-admin-chartjs

开启扩展位置在 config/admin.php,extensions这一栏

'extensions' => [
        'chartjs' => [
            // 如果你想关闭的话将true改为false
            'enable' => true,
        ]
    ]

添加模板文件 resources/views/admin/chartjs.blade.php,内容:

<canvas id="myChart" width="400" height="400"></canvas>
<script>
$(function () {
    var ctx = document.getElementById("myChart").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
            datasets: [{
                label: '# of Votes',          //数据类型 折线图
                type: "line",
                data: [12, 19, 3, 5, 2, 3],
                backgroundColor:'rgba(54, 162, 235, 0.1)',
                borderColor:'rgba(255,99,132,1)',
                borderWidth: 1
            },{
                label: '# of Votes',          //数据类型 柱状图
                type: "bar",
                data: [16, 13, 11, 15, 2, 3],
                backgroundColor: [
                    'rgba(255, 99, 132, 0.2)',
                    'rgba(54, 162, 235, 0.2)',
                    'rgba(255, 206, 86, 0.2)',
                    'rgba(75, 192, 192, 0.2)',
                    'rgba(153, 102, 255, 0.2)',
                    'rgba(255, 159, 64, 0.2)'
                ],
                borderColor: [
                    'red',
                    'rgba(54, 162, 235, 1)',
                    'rgba(255, 206, 86, 1)',
                    'rgba(75, 192, 192, 1)',
                    'rgba(153, 102, 255, 1)',
                    'rgba(255, 159, 64, 1)'
                ],
                borderWidth: 1
            }]
        },
        
        options: {        //显示数值
            "animation": {
                "duration": 1,
                "onComplete": function() {
                    var chartInstance = this.chart,
                    ctx = chartInstance.ctx;

                    ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);            //设置字体颜色
                    ctx.fillStyle = "black";
                    ctx.textAlign = 'center';
                    ctx.textBaseline = 'bottom';

                    this.data.datasets.forEach(function(dataset, i) {
                    var meta = chartInstance.controller.getDatasetMeta(i);
                    meta.data.forEach(function(bar, index) {
                        var data = dataset.data[index];
                        ctx.fillText(data, bar._model.x, bar._model.y - 5);
                    });
                    });
                }
            },
            scales: {
                yAxes: [{
                    ticks: {
                        beginAtZero:true
                    }
                }]
            }
        }
    });
});
</script>

controller,用的时候:

use Encore\Admin\Widgets\Box;

class ChartjsController extends Controller
{
    public function index(Content $content)
    {
        return $content
            ->header('Chartjs')
            ->body(new Box('Bar chart', view('admin.chartjs')));
    }
}

前人栽树后人乘凉篇

他人踩坑记录https://www.jianshu.com/p/06df99ce22c2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容