成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel tap 用法

el09xccxy / 504人閱讀

摘要:中也可以在類中使用方法。這里有一個(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è)微妙的語法是從 RubyLodash 借鑒而來,允許你去 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)單的例子開始,提取 LaravelAuthenticateSession@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 的 createupdate 方法支持 ["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ù)重寫。

Collection

Laravel 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

相關(guān)文章

  • Laravel 中強(qiáng)大的tap你用過么

    摘要:在調(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...

    junfeng777 評(píng)論0 收藏0
  • 十五個(gè)常用的 Laravel 集合(Collection)

    摘要:將返回通過回調(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://...

    alphahans 評(píng)論0 收藏0
  • 十個(gè)推薦使用的 Laravel 的輔助函數(shù)

    摘要:文章轉(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...

    CastlePeaK 評(píng)論0 收藏0
  • 10個(gè)非常好用的 Laravel 輔助函數(shù)

    摘要:要解決此問題,只需運(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...

    liangzai_cool 評(píng)論0 收藏0
  • 十個(gè)推薦使用的 Laravel 的輔助函數(shù)

    摘要:函數(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...

    琛h。 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<