【问题标题】:How can I reuse Laravel 5 Collection Filters?如何重用 Laravel 5 集合过滤器?
【发布时间】:2015-05-15 18:53:16
【问题描述】:

我有一个自定义集合 sortBy 函数,用于对模型进行排序。问题是,每次我想对其进行排序时,我都会复制并粘贴此过滤器代码。这似乎超出了最佳实践,因为复制和粘贴代码以供重用是不行的。处理此问题的最佳做法是什么?

例如,我们有 Eloquent 范围,可用于基于可重用查询的排​​序和类似的东西,但对于沿同一脉络的集合则没有。

【问题讨论】:

  • 不能在Model类中添加sortBy方法吗?每次您扩展模型(使用所有模型)时,它们都会继承它。
  • 我的错,你在谈论收藏。那么,你不能编辑 Collection 类吗?

标签: php eloquent laravel-5


【解决方案1】:

声明一个“helper”函数(请参阅 Laravel 的 helpers 以了解将其放置在何处以及如何自动加载它)并在需要排序的任何地方使用它,如下所示:

排序函数:

function mySortHelper($a, $b) {
    // ... sorting code goes here ...
}

当你需要使用它时:

$collection->sortBy("myHelperFunction");

编辑:添加辅助函数

这是我在我的应用程序中执行此操作的方式。

app 目录中,创建一个名为Helpers 的文件夹。

Helpers 目录中,创建一个名为(例如)Sorting.php 的新 PHP 文件。

在这个新文件中,像这样创建你的函数:

if ( ! function_exists('mySortHelper'))
{
    function mySortHelper($a, $b)
    {
        return $a<$b ? -1 : 1;
    }
}

此代码是从 Laravel 框架帮助程序文件(位于 vendor/laravel/framework/src/Illuminate/Foundation/helpers.php)中复制的(有更改)。

那么剩下的就是自动加载了。更新您的 composer.json 文件:

"autoload": {
    "files": [
        ...
        "app/Helpers/Sorting.php",
        ...
    ]
},

composer.jsonautoload 部分中可能还有其他部分或files 下列出的其他内容。只需将您创建的文件添加到composer.json 的该部分并运行composer dump-autoload 即可更新。现在,您的辅助函数将在您的 Laravel 应用程序中可用。

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 2017-08-03
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多