摘要:中也可以在類中使用方法。這里有一個(gè)例子,用于網(wǎng)站支持英語和法語。取代月份的語言翻譯文件,使用列出一年每個(gè)月份的。使用處理控制臺(tái)命令進(jìn)度條這是在集合中最典型的用例。
本文參照轉(zhuǎn)譯:
http://derekmd.com/2017/02/la...
https://murze.be/2017/02/lara...
Laravel 5.3 中增加了一個(gè)新的全局幫助函數(shù) tap(),改進(jìn)了框架的聲明能力。這個(gè)微妙的語法是從 Ruby 和 Lodash 借鑒而來,允許你去 tap 成鏈。
先看看 tap() 幫助函數(shù)的代碼,只有短短的幾行:
function tap($value, $callback) { $callback($value); return $value; }
你需要傳一個(gè)值和一個(gè)回調(diào)到方法中,值作為回調(diào)的參數(shù),回調(diào)將執(zhí)行,最后值被返回。
執(zhí)行中間操作從一個(gè)簡(jiǎn)單的例子開始,提取 Laravel 的 AuthenticateSession@handle() 的一些代碼,一些 PHP 開發(fā)者非常熟悉的解決方案:
$response = $next($request); $this->storePasswordHashInSession($request); return $response;
使用 tap() 幫助函數(shù):
return tap($next($request), function () use ($request) { $this->storePasswordHashInSession($request); });
另外的一個(gè)簡(jiǎn)單的例子,讓我們看看 IlluminateCacheRepository 下的 pull 方法,此函數(shù)將從指定鍵的緩存中獲取值,并將其刪除。pull 方法的實(shí)現(xiàn):
public function pull($key, $default = null) { $value = $this->get($key, $default); $this->forget($key) // returns a boolean; return $value; }
上面的例子中,$this-> forget() 返回一個(gè)布爾值,所以要使我們的函數(shù)返回原始值,需要將其儲(chǔ)存到臨時(shí)變量 $value 中。以下是 tap() 的實(shí)現(xiàn),不再需要臨時(shí)變量:
public function pull($key, $default = null) { return tap($this->get($key, $default), function ($value) use ($key) { $this->forget($key); }); }恢復(fù)狀態(tài)
Eloquent 的 create 和 update 方法支持 ["timestamps" => false] 選項(xiàng)。如果這被實(shí)現(xiàn)成鏈?zhǔn)椒椒?,結(jié)果的可讀性會(huì)更好。
// 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; } }
現(xiàn)在 Message 模型可以鏈?zhǔn)绞褂靡陨系姆椒ǎ?/p>
request()->user()->latestMessage->keepingTimestamps(function ($message) { $message->markRead(); // updates a "read_at" timestamp instead }); // returns the latestMessage
如果你寫的代碼有 DB::transaction() 相同的模式,你可以在 Laravel 5.4 使用 tap() 幫助函數(shù)重寫。
CollectionLaravel 5.4 中也可以在 Collection 類中使用 tap() 方法。你可以在任何地方使用,而不需要破壞鏈?zhǔn)健?duì)于 Laravel 5.3 及更早的版本,你只需要復(fù)制粘貼五行代碼的方法作為 Collection macro 到你項(xiàng)目的 AppServiceProvider@boot() 即可。
這里有一個(gè)例子,用于 Laravel 網(wǎng)站支持英語和法語。取代月份的語言翻譯文件,使用 Carbon 列出一年每個(gè)月份的 。因此這個(gè)模型的修飾方法:
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, ""); } }); }
對(duì)于更多的語言支持,設(shè)置/恢復(fù)狀態(tài)將提取到其他方法,使其更加可讀。
使用 Collection?tap() 處理控制臺(tái)命令進(jìn)度條這是在集合中最典型的用例。你甚至可以在 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(); }); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22393.html
摘要:在調(diào)用回調(diào)函數(shù)后,它將返回參數(shù)。例如在上面的例子中,我們傳遞一個(gè)參數(shù)照片模型和一個(gè)回調(diào)函數(shù),該函數(shù)簡(jiǎn)單地將設(shè)置為并保存模型。如果沒有給出回調(diào)函數(shù),因?yàn)樗强蛇x的,將返回的新實(shí)例。允許你使用數(shù)據(jù),但不會(huì)修改原始返回值。 在本文,我們將討論 Laravel 中的 tap。我們將詳細(xì)討論 tap 幫助函數(shù)和 collection 中的 tap 方法。 Tap 幫助函數(shù) 舊的實(shí)現(xiàn)方式 Lara...
摘要:將返回通過回調(diào)真值測(cè)試的第一個(gè)項(xiàng)的鍵。方法將集合分割為多個(gè)給定大小的較小集合。它可用于在任何位置的調(diào)試和查找集合內(nèi)的內(nèi)容。方法用于遍歷整個(gè)集合。這對(duì)集合同樣有效。它將導(dǎo)致由第二個(gè)參數(shù)的值作為鍵的集合。它接受回調(diào)并傳遞并將集合傳遞給它。 showImg(https://segmentfault.com/img/remote/1460000018924972); 文章轉(zhuǎn)自:https://...
摘要:文章轉(zhuǎn)自包含各種全局輔助函數(shù)。返回應(yīng)用程序中公共目錄的完全限定的絕對(duì)路徑。要解決此問題,只需運(yùn)行以下命令即可使用包函數(shù)將字符串轉(zhuǎn)換為復(fù)數(shù)形式。該值將被傳遞給閉包,然后該值將被返回。方法返回布爾值,但由于用了,所以它將返回。 showImg(https://segmentfault.com/img/remote/1460000018944915?w=1408&h=846); 文章轉(zhuǎn)自:h...
摘要:要解決此問題,只需運(yùn)行以下命令即可使用包函數(shù)將字符串轉(zhuǎn)換為復(fù)數(shù)形式。函數(shù)接受兩個(gè)參數(shù)一個(gè)值和一個(gè)閉包。該值將被傳遞給閉包,然后該值將被返回。更新方法返回布爾值,但由于用了,所以它將返回。這對(duì)調(diào)試非常有用。函數(shù)根據(jù)給定的字符串生成一個(gè)友好的。 Laravel包含各種全局輔助函數(shù)(helper), 你可以使用它們使開發(fā)工作流程更加輕松。 在這里,我將會(huì)列一下10個(gè)最好的 Laravel h...
摘要:函數(shù)允許你將多維數(shù)組轉(zhuǎn)換為使用點(diǎn)符號(hào)的一維數(shù)組。返回應(yīng)用程序中公共目錄的完全限定的絕對(duì)路徑。要解決此問題,只需運(yùn)行以下命令即可使用包將字符串轉(zhuǎn)換為復(fù)數(shù)形式。接受兩個(gè)參數(shù)一個(gè)值和一個(gè)閉包。該值將被傳遞給閉包,然后該值將被返回。 array_dot() 函數(shù)允許你將多維數(shù)組轉(zhuǎn)換為使用點(diǎn)符號(hào)的一維數(shù)組。 $array = [ user => [username => somethin...
閱讀 2132·2021-11-23 09:51
閱讀 2881·2021-11-22 15:35
閱讀 2975·2019-08-30 15:53
閱讀 1069·2019-08-30 14:04
閱讀 3304·2019-08-29 12:39
閱讀 1843·2019-08-28 17:57
閱讀 1138·2019-08-26 13:39
閱讀 578·2019-08-26 13:34