【问题标题】:How to allow 'get' request to search Laravel Backpack如何允许“获取”请求搜索 Laravel Backpack
【发布时间】:2017-07-19 22:54:44
【问题描述】:

我已经安装了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',
]);

我不确定这是否与我尝试启用的功能相关(我发现它只允许发布而不是获取)。

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

我有点期待这个功能已经存在,也许它确实存在,但我只是还没有找到要使用的 URL。

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

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

【问题讨论】:

    标签: laravel-backpack


    【解决方案1】:

    执行您正在尝试的操作的默认方法是使用Backpack's filters,它允许您完全这样做 - 但会预先填充过滤器,而不是 DataTables 搜索表单。看看吧,我想这会是最快的方式。

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

    希望对你有帮助。


    回答你的第一个猜测,search() 方法反直觉地用于返回所有结果,无论是否搜索,如果你使用的是AjaxDataTables

    // ------ 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();
    

    所以不,这与您尝试做的事情无关。如果您在那里进行修改,它们将分别应用于每一列行。

    【讨论】:

      【解决方案2】:

      这比我预期的要容易。

      resources/views/vendor/backpack/crud/list.blade.phpvar 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 时,“someSearchTermHere”都会预填充到 DataTable 中,并且会显示相应的结果。

      感谢Doug 和@tabacitu 的鼓励。

      更新:在更高版本的 Backpack 中(“backpack/base”:“^1.0.0”,“backpack/crud”:“^3.5.0”),此代码需要进入 dataTableConfiguration: {...} 内 @987654327 @ 代替。

      更新:对于 Laravel 6.x 和 Backpack 4,datatables_logic.blade.php 还需要:

      $searchQuery = Request::input('q');
      

      在 javascript 中:

      @if ($crud->getPersistentTable() && !$searchQuery)
          stateSave: true,//https://datatables.net/reference/option/stateSave
      @endif
      

      @if ($searchQuery)
          $('.dataTables_filter input').val('{{$searchQuery}}');
      @endif
      

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 2014-10-28
        • 2016-11-18
        • 2016-04-12
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2018-04-27
        相关资源
        最近更新 更多