摘要:中也可以在類中使用方法。這里有一個例子,用于網站支持英語和法語。取代月份的語言翻譯文件,使用列出一年每個月份的。使用處理控制臺命令進度條這是在集合中最典型的用例。
本文參照轉譯:
http://derekmd.com/2017/02/la...
https://murze.be/2017/02/lara...
Laravel 5.3 中增加了一個新的全局幫助函數 tap(),改進了框架的聲明能力。這個微妙的語法是從 Ruby 和 Lodash 借鑒而來,允許你去 tap 成鏈。
先看看 tap() 幫助函數的代碼,只有短短的幾行:
function tap($value, $callback) { $callback($value); return $value; }
你需要傳一個值和一個回調到方法中,值作為回調的參數,回調將執行,最后值被返回。
執行中間操作從一個簡單的例子開始,提取 Laravel 的 AuthenticateSession@handle() 的一些代碼,一些 PHP 開發者非常熟悉的解決方案:
$response = $next($request); $this->storePasswordHashInSession($request); return $response;
使用 tap() 幫助函數:
return tap($next($request), function () use ($request) { $this->storePasswordHashInSession($request); });
另外的一個簡單的例子,讓我們看看 IlluminateCacheRepository 下的 pull 方法,此函數將從指定鍵的緩存中獲取值,并將其刪除。pull 方法的實現:
public function pull($key, $default = null) { $value = $this->get($key, $default); $this->forget($key) // returns a boolean; return $value; }
上面的例子中,$this-> forget() 返回一個布爾值,所以要使我們的函數返回原始值,需要將其儲存到臨時變量 $value 中。以下是 tap() 的實現,不再需要臨時變量:
public function pull($key, $default = null) { return tap($this->get($key, $default), function ($value) use ($key) { $this->forget($key); }); }恢復狀態
Eloquent 的 create 和 update 方法支持 ["timestamps" => false] 選項。如果這被實現成鏈式方法,結果的可讀性會更好。
// Method defined in AppModel that AppMessage extends. public function keepingTimestamps(callable $callback) { try { $timestamps = $this->timestamps; $this->timestamps = false; return tap($this, $callback); } finally { $this->timestamps = $timestamps; } }
現在 Message 模型可以鏈式使用以上的方法:
request()->user()->latestMessage->keepingTimestamps(function ($message) { $message->markRead(); // updates a "read_at" timestamp instead }); // returns the latestMessage
如果你寫的代碼有 DB::transaction() 相同的模式,你可以在 Laravel 5.4 使用 tap() 幫助函數重寫。
CollectionLaravel 5.4 中也可以在 Collection 類中使用 tap() 方法。你可以在任何地方使用,而不需要破壞鏈式。對于 Laravel 5.3 及更早的版本,你只需要復制粘貼五行代碼的方法作為 Collection macro 到你項目的 AppServiceProvider@boot() 即可。
這里有一個例子,用于 Laravel 網站支持英語和法語。取代月份的語言翻譯文件,使用 Carbon 列出一年每個月份的 。因此這個模型的修飾方法:
public function monthOptions() { return collect(range(1, 12)) ->keyByValue() // custom Collection macro ->tap(function () { if (App::getLocale() === "fr") { setlocale(LC_TIME, "fr_CA"); } }) ->map(function ($month) { return sprintf("%02d - %s", $month, Carbon::now()->month($month)->formatLocalized("%B")); }) ->tap(function () { if (App::getLocale() === "fr") { setlocale(LC_TIME, ""); } }); }
對于更多的語言支持,設置/恢復狀態將提取到其他方法,使其更加可讀。
使用 Collection?tap() 處理控制臺命令進度條這是在集合中最典型的用例。你甚至可以在 handle() 處理過程中保持其方法鏈。
public function handle() { Club::findOrFail($this->option("club")) ->members() ->subscribed() ->get() ->tap(function ($members) { $this->output->progressStart($members->count()); }) ->each(function ($member) { Mail::to($member)->queue(new Newsletter($member, $this->matchReport()); $this->output->progressAdvance(); }) ->tap(function () { $this->output->progressFinish(); }); } public function matchReport() { return once(function () { return MatchReport::ofRound($this->option("round"))->firstOrFail(); }); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22393.html
摘要:在調用回調函數后,它將返回參數。例如在上面的例子中,我們傳遞一個參數照片模型和一個回調函數,該函數簡單地將設置為并保存模型。如果沒有給出回調函數,因為它是可選的,將返回的新實例。允許你使用數據,但不會修改原始返回值。 在本文,我們將討論 Laravel 中的 tap。我們將詳細討論 tap 幫助函數和 collection 中的 tap 方法。 Tap 幫助函數 舊的實現方式 Lara...
摘要:將返回通過回調真值測試的第一個項的鍵。方法將集合分割為多個給定大小的較小集合。它可用于在任何位置的調試和查找集合內的內容。方法用于遍歷整個集合。這對集合同樣有效。它將導致由第二個參數的值作為鍵的集合。它接受回調并傳遞并將集合傳遞給它。 showImg(https://segmentfault.com/img/remote/1460000018924972); 文章轉自:https://...
摘要:文章轉自包含各種全局輔助函數。返回應用程序中公共目錄的完全限定的絕對路徑。要解決此問題,只需運行以下命令即可使用包函數將字符串轉換為復數形式。該值將被傳遞給閉包,然后該值將被返回。方法返回布爾值,但由于用了,所以它將返回。 showImg(https://segmentfault.com/img/remote/1460000018944915?w=1408&h=846); 文章轉自:h...
摘要:要解決此問題,只需運行以下命令即可使用包函數將字符串轉換為復數形式。函數接受兩個參數一個值和一個閉包。該值將被傳遞給閉包,然后該值將被返回。更新方法返回布爾值,但由于用了,所以它將返回。這對調試非常有用。函數根據給定的字符串生成一個友好的。 Laravel包含各種全局輔助函數(helper), 你可以使用它們使開發工作流程更加輕松。 在這里,我將會列一下10個最好的 Laravel h...
摘要:函數允許你將多維數組轉換為使用點符號的一維數組。返回應用程序中公共目錄的完全限定的絕對路徑。要解決此問題,只需運行以下命令即可使用包將字符串轉換為復數形式。接受兩個參數一個值和一個閉包。該值將被傳遞給閉包,然后該值將被返回。 array_dot() 函數允許你將多維數組轉換為使用點符號的一維數組。 $array = [ user => [username => somethin...
閱讀 2096·2021-11-23 09:51
閱讀 2839·2021-11-22 15:35
閱讀 2937·2019-08-30 15:53
閱讀 1037·2019-08-30 14:04
閱讀 3276·2019-08-29 12:39
閱讀 1802·2019-08-28 17:57
閱讀 1086·2019-08-26 13:39
閱讀 551·2019-08-26 13:34