我有一个自定义集合sortBy函数,用于对模型进行排序。问题是,每次我想对它进行排序时,我都会复制并粘贴此过滤器代码。看起来这必须超出最佳实践,因为复制和粘贴代码以供重用是不可能的。处理此问题的最佳做法是什么?
例如,我们有可用于基于可重用查询的排序和类似东西的Eloquent范围,但对于同样的集合没有任何内容。
答案 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应用程序中使用。