国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel tap 用法

el09xccxy / 472人閱讀

摘要:中也可以在類中使用方法。這里有一個例子,用于網站支持英語和法語。取代月份的語言翻譯文件,使用列出一年每個月份的。使用處理控制臺命令進度條這是在集合中最典型的用例。

本文參照轉譯:

http://derekmd.com/2017/02/la...

https://murze.be/2017/02/lara...

Laravel 5.3 中增加了一個新的全局幫助函數 tap(),改進了框架的聲明能力。這個微妙的語法是從 RubyLodash 借鑒而來,允許你去 tap 成鏈。

先看看 tap() 幫助函數的代碼,只有短短的幾行:

function tap($value, $callback)
{
   $callback($value);

   return $value;
}

你需要傳一個值和一個回調到方法中,值作為回調的參數,回調將執行,最后值被返回。

執行中間操作

從一個簡單的例子開始,提取 LaravelAuthenticateSession@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 的 createupdate 方法支持 ["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() 幫助函數重寫。

Collection

Laravel 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你用過么

    摘要:在調用回調函數后,它將返回參數。例如在上面的例子中,我們傳遞一個參數照片模型和一個回調函數,該函數簡單地將設置為并保存模型。如果沒有給出回調函數,因為它是可選的,將返回的新實例。允許你使用數據,但不會修改原始返回值。 在本文,我們將討論 Laravel 中的 tap。我們將詳細討論 tap 幫助函數和 collection 中的 tap 方法。 Tap 幫助函數 舊的實現方式 Lara...

    junfeng777 評論0 收藏0
  • 十五個常用的 Laravel 集合(Collection)

    摘要:將返回通過回調真值測試的第一個項的鍵。方法將集合分割為多個給定大小的較小集合。它可用于在任何位置的調試和查找集合內的內容。方法用于遍歷整個集合。這對集合同樣有效。它將導致由第二個參數的值作為鍵的集合。它接受回調并傳遞并將集合傳遞給它。 showImg(https://segmentfault.com/img/remote/1460000018924972); 文章轉自:https://...

    alphahans 評論0 收藏0
  • 十個推薦使用的 Laravel 的輔助函數

    摘要:文章轉自包含各種全局輔助函數。返回應用程序中公共目錄的完全限定的絕對路徑。要解決此問題,只需運行以下命令即可使用包函數將字符串轉換為復數形式。該值將被傳遞給閉包,然后該值將被返回。方法返回布爾值,但由于用了,所以它將返回。 showImg(https://segmentfault.com/img/remote/1460000018944915?w=1408&h=846); 文章轉自:h...

    CastlePeaK 評論0 收藏0
  • 10個非常好用的 Laravel 輔助函數

    摘要:要解決此問題,只需運行以下命令即可使用包函數將字符串轉換為復數形式。函數接受兩個參數一個值和一個閉包。該值將被傳遞給閉包,然后該值將被返回。更新方法返回布爾值,但由于用了,所以它將返回。這對調試非常有用。函數根據給定的字符串生成一個友好的。 Laravel包含各種全局輔助函數(helper), 你可以使用它們使開發工作流程更加輕松。 在這里,我將會列一下10個最好的 Laravel h...

    liangzai_cool 評論0 收藏0
  • 十個推薦使用的 Laravel 的輔助函數

    摘要:函數允許你將多維數組轉換為使用點符號的一維數組。返回應用程序中公共目錄的完全限定的絕對路徑。要解決此問題,只需運行以下命令即可使用包將字符串轉換為復數形式。接受兩個參數一個值和一個閉包。該值將被傳遞給閉包,然后該值將被返回。 array_dot() 函數允許你將多維數組轉換為使用點符號的一維數組。 $array = [ user => [username => somethin...

    ?。?。 評論0 收藏0

發表評論

0條評論

el09xccxy

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<