Laravel-Admin 开发笔记

最近在公司开发后台管理系统,然后本着简单快速的原则,选择Laravel-Admin

初期的安装就不说了,基本安装GitHub的安装文档来就行啦

1.自定义问题

但是Laravel-admin已经在后台模板中进行了高度的定义
如果想要自定义界面的话,还是比较复杂,比如要开发一个小说阅读界面。
文档的自定义组件看过了,个人感觉还是比较复杂的,不太实用。

所以想到一个思路,就是通过laravel的渲染视图拿到里面的html,在通过laravel-admin的row方法渲染过去。
经过谷歌,发现view有一个render方法,可以之间渲染html
具体代码大概这样


return Admin::content(function (Content $content) use ($book_id) {

            $book = Book::find($book_id);
            $chapters = $book->chapters();
            $articleView = view('admin.reader',compact('chapters'))
                ->render();
            $content->row($articleView);
});

然后,就可以将定义的内容完全抽离到view层,当然,也可以随便定义啦

file

2.闭包中的$this

在显示列表的时候,laravel-admin一般使用$gird来进行定义显示的行

$grid->comment_time('评论时间')->display(function ($time){

        dd($this);

        return date('Y-m-d',$time);
  });

在闭包中,这个$this可以拿到当前行的对象所有字段,然后就可以自定义它,做各种花式跳转了,比如帖子列表,我进去之后可以管理该帖子下的所有评论,直接将帖子id传进去过滤就好啦

3.监控字段的更新

后台很多字段的更新往往和业务逻辑有关,当然涉及到重写的问题,在laravel-admin中,都放在ModelForm这个Trait里面,具体代码

<?php

namespace Encore\Admin\Controllers;

trait ModelForm
{
    public function show($id)
    {
        return $this->edit($id);
    }

    public function update($id)
    {
        return $this->form()->update($id);
    }

    public function destroy($id)
    {
        if ($this->form()->destroy($id)) {
            return response()->json([
                'status'  => true,
                'message' => trans('admin::lang.delete_succeeded'),
            ]);
        } else {
            return response()->json([
                'status'  => false,
                'message' => trans('admin::lang.delete_failed'),
            ]);
        }
    }

    public function store()
    {
        return $this->form()->store();
    }
}

我们要做的,当然是重写它了,比如我在书籍状态改变的时候要推送给用户
重写update

public function update($id) {
        $book = Book::find($id);
                // 给书的作者推送逻辑

        $result = $this->form()->update($id);
                // 界面的跳转逻辑
        return $result;
 }

当然,这里有一个方法

admin_toastr('laravel-admin 提示','success');

laravel-admin提示,如果你用laravel-admin,你一定会用到?

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
王举
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 39

记过谷歌 ->经过谷歌

你这个 update 重写完全没必要,可以使用 callback,甚至也可以用 Model 的事件(如果前后台通用的话).

这个项目坑还存在不少,看 issue 数量也知道,bug 和不便的地方比较多, 需要动手能力比较强,类似的东西我也用过好几个,我对这种项目也是又爱又恨,效率的确是快,但后续扩展起来很多时候并没有那么方便,甚至很痛苦,所以稍微大点的、瀑布流需求的、后台需求比较多的都不建议用这种东西,吐槽结束。

6年前 评论

记过谷歌 ->经过谷歌

你这个 update 重写完全没必要,可以使用 callback,甚至也可以用 Model 的事件(如果前后台通用的话).

这个项目坑还存在不少,看 issue 数量也知道,bug 和不便的地方比较多, 需要动手能力比较强,类似的东西我也用过好几个,我对这种项目也是又爱又恨,效率的确是快,但后续扩展起来很多时候并没有那么方便,甚至很痛苦,所以稍微大点的、瀑布流需求的、后台需求比较多的都不建议用这种东西,吐槽结束。

6年前 评论
小柯基神

写到自定义完全想跳楼

5年前 评论
puzzle9 4年前
王举

@long1774341213 你可以重新update方法,如果字段没有变动的话就不去更新
大致思路:

file

6年前 评论
bing8u
5年前 评论

@long1774341213 请问你在用重写的类的时候报错了吗

5年前 评论

请问一下我想自定义提交表单得怎么写?我表单上有动态的信息需要提交,怎么能自定义保存到数据库呀

6年前 评论

刚接触 Laravel-Admin, 请教一下, form 表单有一个 hasMany 方法可以处理一对多表单, 但默认的样式体验不太好, 我想自定义成别的样式, 比如做成 tab 标签的形式, 该怎么处理 ?

6年前 评论
Destiny

@王举 最近也是用了 laravel-admin,你的自定义页面方法很管用,Get。谢谢

5年前 评论
ThinkQ

很棒啊

5年前 评论

大神,问个问题,laravel-admin怎么把图片直接上传到腾讯云COS上面呢,我看了文档上面有上传到七牛云,需要安装对应laravel storage的适配器,但是我没有找到关于腾讯云cos的laravel storage的适配器...

5年前 评论

筛选的代码在哪设置??

5年前 评论

感觉这个 官方demo的 权限很乱 又有个人权限 又有组权限 还有menu 的role

5年前 评论

想在页面直接传图片到我的七牛云,然后把七牛云返回的key和页面其他表单数据再一同提交给服务器,不知道有没有比较好的方案

5年前 评论

你们多对多的表,修改添加数据怎么做的,需要填写/修改另一张表里面的多个字段,不是像角色一样只修改一个字段的值,
有没有把关联的另一张表的所有数据都取出来

6年前 评论
QINTIANZHU

老哥 如果是想在form里面想添加一些JS实现一些表单的效果应该怎么giao???

5年前 评论

自定义问题为什么不直接使用这种格式

$content->body(view('admin.orders.show', ['order' => $order]));
5年前 评论

后台管理系统你用来用户页面,你是不是理解错了

5年前 评论

有办法自己写的前端页面继承到laravel-admin的布局里面吗?

3年前 评论

可以试试这个 完全不一样的LaravelAdmin www.laraveladmin.cn

3年前 评论

我有做了一个类似的开源项目

LaravelAdmin

www.laraveladmin.cn/ LaravelAdmin,LaravelAdmin官网,LaravelAdmin单页面应用,LaravelAdmin前后端分离,Laravel后台管理系统

3年前 评论

嗯,谢谢。我想问另一个问题,就是在编辑更新的时候,我想把一些图片信息拿出来,只做展示,不让修改,发现用文档上给的display方法,不好使,也不知道是使用的方式不对,还是怎么,请大神指点一下!!!

6年前 评论
王举

@736713830 回复数量2::smile_cat:

6年前 评论
王举

@springjk 哈哈,但是现在已经用了,只能已用到底了::8ball:

6年前 评论

@anyuzhe 我上面说了看项目需要,明确了后台不仅仅是管理员随便用用而且业务逻辑比较多的时候,建议还是自己写比较好,可以去找个模板写,比如 inspinia, 如果喜欢 SPA 的就在分开写,目前我没有发现非常好用功能又多扩展性又高的这种后台生成器,毕竟这两个需求经常是相对立的。

6年前 评论

最近也看了这个,发现自定义起来确实很痛苦,你现在用的怎么样了

6年前 评论
王举

@carlclone 还行吧。反正踩了很多坑了。。

6年前 评论

laravel-admin 创建(create)和编辑(edit)时,如果某个字段设置了唯一,编辑时该字段没有修改也报冲突,怎么解决的。

6年前 评论

意思是写一个类继承Form.php类,在控制器调用自己写的类,对吗
这是我的Form.php里面的update,长这样
public function update($id)
{
$data = Input::all();

    $data = $this->handleEditable($data);

    $data = $this->handleFileDelete($data);

    if ($this->handleOrderable($id, $data)) {
        return response([
            'status'  => true,
            'message' => trans('admin::lang.update_succeeded'),
        ]);
    }

    /* @var Model $this->model */
    $this->model = $this->model->with($this->getRelations())->findOrFail($id);

    $this->setFieldOriginalValue();

    // Handle validation errors.
    if ($validationMessages = $this->validationMessages($data)) {
        return back()->withInput()->withErrors($validationMessages);
    }

    if (($response = $this->prepare($data)) instanceof Response) {
        return $response;
    }

    DB::transaction(function () {
        $updates = $this->prepareUpdate($this->updates);

        foreach ($updates as $column => $value) {
            /* @var Model $this->model */
            $this->model->setAttribute($column, $value);
        }

        $this->model->save();

        $this->updateRelation($this->relations);
    });

    if (($result = $this->complete($this->saved)) instanceof Response) {
        return $result;
    }

    if ($response = $this->ajaxResponse(trans('admin::lang.update_succeeded'))) {
        return $response;
    }

    return $this->redirectAfterUpdate();
}
6年前 评论
王举

@long1774341213 重写Model模型的update方法

6年前 评论

用过,当需求复杂的时候,就不太合适了,因为作者定好的组件比较固定,重新扩展有点浪费时间

6年前 评论
王举

@long1774341213 我的做法是这样,仅供参考

$form->display('image','帖子图片')->with(function ($image){

                $content .= "<img width='100%' src='$image'></img>";

                return $content;

            });
6年前 评论

谢谢大神,能用。我还需要加点击放大缩小的功能,不知道有其他方法能用不,因为项目用到这种情况比较多,准备自定义一个这样的插件,好复用。

6年前 评论
王举

@long1774341213 那就看文档啦,里面有自定义组件的,你研究一下

6年前 评论

非常感谢,非常感谢:pray: ,有什么问题再请教您!!!

6年前 评论

大神:问一下,radio checkbox的默认选中,怎么写的,加default 好像没什么用?

6年前 评论

刚用了不到半个月,一个简单后台的确可以快速实现,需求复杂还是蛮糟心啊

6年前 评论
王举

@xylovevae 学习方法:Laravel-Admin文档:http://laravel-admin.org/docs/#/zh/
Laravel-Admin Demo:里面含实现的代码:http://laravel-admin.org/demo/auth/login
遇到问题提问地址:https://github.com/z-song/laravel-admin/is...
都是这么来的,我第一次用的时候也什么都不懂,边用边学边总结呗

6年前 评论

回复数量: 0

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!