如何重用Laravel 5集合过滤器?

时间:2015-05-15 18:53:17

标签: php eloquent laravel-5

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

例如,我们有可用于基于可重用查询的排​​序和类似东西的Eloquent范围,但对于同样的集合没有任何内容。

1 个答案:

答案 0 :(得分:1)

声明一个“帮助者”功能(请参阅Laravel的助手,了解如何放置它以及如何自动加载它)并在需要排序的地方使用它,如下所示:

排序功能:

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",
        ...
    ]
},

autoload的{​​{1}}部分或composer.json下列出的其他内容可能还有其他部分。只需将您创建的文件添加到files的该部分,然后运行composer.json即可进行更新。您的帮助程序功能现在可以在整个Laravel应用程序中使用。