Laravel Backpack 后台管理实现链接参数过滤

更新日期: 2019-05-08 阅读次数: 1746 字数: 307 分类: backpack

例如,默认 Backpack 实现的一个 CRUD controller 可以查看一个数据表中的所有数据,这里假设是所有的支付历史。

但是,我现在需要能够从用户列表页面通过一个链接,链接到支付历史页面时,可以只查看该用户的支付历史。

实现方法

route/admin.php 中添加两个路由

CRUD::resource('pay_history', 'PayHistoryCrudController');
CRUD::resource('user/{user_id}/pay_history', 'PayHistoryCrudController');

这样

  • 访问 /admin/pay_history 时,看到的就是所有的支付历史。
  • 访问 /admin/user/1/pay_history 时,看到的就是 user_id 为 1 的用户的个人支付历史。

Admin/PayHistoryCrudController.php 中进行修改

class PayHistoryCrudController extends CrudController
{
    public $user;

    public function __construct(Request $request)
    {
        $this->user = User::find($request->route('user_id'));
        parent::__construct();
    }

    public function setup()
    {
        $this->crud->setModel('App\Models\PayHistory');

        if ($this->user) {
            $this->crud->setRoute(
                config('backpack.base.route_prefix') . '/user/' . $this->user->id . '/pay_history'
            );
            $this->crud->setEntityNameStrings('支付历史', '支付历史 - ' . $this->user->name);
        } else {
            $this->crud->setRoute(config('backpack.base.route_prefix') . '/pay_history');
            $this->crud->setEntityNameStrings('支付历史', '支付历史');
        }

        if ($this->user) {
            $this->crud->addClause('where', 'user_id', '=', $this->user->id);
        }

    ...

}

404 的问题

旧版本的 backpack 会出现 404 的问题

参考这里的解决方案:https://github.com/Laravel-Backpack/CRUD/issues/252

trait 真是个神器。方便给多个 class 插入相同的函数功能列表。

reference variable name xxx more than once

Route pattern "/admin/xxx/{location}/location/{location}" cannot reference variable name "location" more than once

参考:Route pattern cannot reference variable name more than once

爱评论不评论

近期节日

2020年02月24日 第三世界青年日
2020年02月24日 龙抬头
2020年02月28日 世界居住条件调查日
2020年03月01日 国际海豹日
2020年03月03日 全国爱耳日
2020年03月05日 学雷锋日
2020年03月05日 惊蛰
2020年03月08日 三八妇女节
2020年03月12日 植树节
2020年03月14日 白色情人节
2020年03月15日 消费者权益日
2020年03月17日 国际航海日
查看更多节日