簡體   English   中英

如何重用Laravel 5 Collection過濾器?

[英]How can I reuse Laravel 5 Collection Filters?

我有一個用於對模型進行排序的自定義集合sortBy函數。 問題是,每次要排序時,我都會復制並粘貼此過濾器代碼。 看起來這一定超出了最佳實踐,因為復制和粘貼代碼以供重用是不行的。 處理此問題的最佳做法是什么?

例如,對於基於可重用的查詢的排序和類似的東西,我們有雄辯的范圍,但對於沿同一方向的集合則沒有。

聲明一個“幫助程序”功能(請參閱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",
        ...
    ]
},

composer.jsonautoload部分中可能還有其他部分,或者在files下列出了其他內容。 只需將創建的文件添加到composer.json該部分,然后運行composer dump-autoload進行更新即可。 現在,您的助手功能將在整個Laravel應用程序中可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM