首页 文章

如何允许'get'请求搜索Laravel Backpack

提问于
浏览
0

我安装了https://github.com/Laravel-Backpack并喜欢它 .

但我发现文档很稀疏,代码太庞大/太复杂,我无法彻底理解如何做到这一点:

我希望能够为诸如 example.com/admin/contact/search/mySearchTermHere 之类的页面添加书签,并且我希望显示联系人列表,其中 mySearchTermHere 被传送到DataTables搜索字段(并显示相应的结果) .

查看代码库时,我发现 CrudRouter.php

Route::post($this->name.'/search', [
    'as' => 'crud.'.$this->name.'.search',
    'uses' => $this->controller.'@search',
]);

我不确定这是否与我想要启用的内容相关(我发现它只允许Post而不是Get) .

我怎样才能实现我的目标(理想情况下不编辑Backpack源代码,下次升级到最新版本时会被覆盖)?

我有点期望这个功能已经存在,也许它确实存在,但我还没有找到使用哪个URL .

附:我正在使用这些版本:

"backpack/base": "^0.7.19",
"backpack/crud": "^3.2"

2 回答

  • 0

    执行您正在尝试的操作的默认方法是使用Backpack's filters,它允许您执行此操作 - 但是将预填充过滤器,而不是DataTables搜索表单 . 看一看,我认为这将是最快的方式 .

    如果只能使用DataTables搜索,您可以根据需要更改列表视图 . 只需创建一个名为 resources/views/backpack/vendor/crud/list.blade.php 的文件 . 背包将自动拾取而不是包装中的那个 . 复制原始文件中的代码并添加所需的自定义逻辑:加载DataTables后,使用jQuery强制搜索 .

    希望能帮助到你 .


    要回答您的第一个猜测,如果您使用AjaxDataTablessearch() 方法将直观地用于返回搜索或未搜索的所有结果:

    // ------ AJAX TABLE VIEW
    // Please note the drawbacks of this though: 
    // - 1-n and n-n relationship columns won't be searched anymore;
    // - date and datetime columns won't be sortable anymore;
    
    $this->crud->enableAjaxTable();
    

    所以不,这与你想要做的事情无关 . 如果您在那里进行修改,它们将分别应用于每个列行 .

  • 1

    这比我预想的要容易 .

    resources/views/vendor/backpack/crud/list.blade.php 中,在 var table = $("#crudTable").DataTable({... 的选项对象中,我添加了:

    @if (Request::input('q'))
      search: {
          search: '{{Request::input('q')}}' //https://stackoverflow.com/a/28578355/470749
      },
    @endif
    

    现在,只要我浏览到 example.com/admin/contact?q=someSearchTermHere ,就会在DataTable中预填充"someSearchTermHere",并显示相应的结果 .

    感谢Doug和@tabacitu的鼓励 .

    更新:在更高版本的Backpack("backpack/base":"^1.0.0","backpack/crud":"^3.5.0")中,此代码需要在 resources\views\vendor\backpack\crud\inc\datatables_logic.blade.php 内进入 dataTableConfiguration: {...} .

相关问题