Laravel でパイプラインを使用する方法を例を通して学びます

青灯夜游
リリース: 2021-10-11 11:09:41
転載
2081 人が閲覧しました

Laravel のチュートリアル コラムでは、Laravel のパイプラインについて説明し、Laravel でのパイプラインの使用例を共有します。

Laravel でパイプラインを使用する方法を例を通して学びます

コードの観点からパイプラインの実際の使用法を紹介します。パイプラインに関する情報はインターネット上にたくさんありますので、ご自身で調べてください。 このブログでは、パイプラインを使用して名前を処理し、統一処理を実現します。 ######背景: 現在、パイプラインの使用に関する入門書は数多くありますが、そのほとんどは導入とガイダンスのみに焦点を当てており、実際にコードに深く踏み込んだ部分はあまりありません。はじめにによると、パイプラインの使用にはいくつかの障害があるとのことですが、参考までに、パイプラインの使用に関する詳細なコード例を以下に示します。 この紹介は私が実際に使った処理のコードを抜粋したもので、私自身が試してみたところ実際に使えるものとなっています。注目を集めるためだけに、気に入らない場合は批判しないでください。

1. コントローラー

ルーター部分
Route::get('/pipe', ['as'=>'pipe', 'uses'=>'PipeController@index']);
ログイン後にコピー

制御コード

<?php

namespace App\Http\Controllers;

use App\Pipes\LeftWords;
use App\Pipes\RightWords;
use App\Pipes\BothSidesWords;
use Illuminate\Http\Request;
use Illuminate\Pipeline\Pipeline;
use App\User;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;

class PipeController extends Controller
{
    /* 定义管道
     *
     * 第一步处理
     * 第二部处理
     * 第三部处理
     * */
    protected $pipes = [
        LeftWords::class,
        RightWords::class,
        BothSidesWords::class,
    ];
    // 首页
    public function index(Request $request){
        $name = $request->input(&#39;name&#39;);
        // $name = Str::random(10);

        return app(Pipeline::class)
            ->send($name)
            ->through($this->pipes)
            ->then(function ($content) {
                return User::create([
                    &#39;name&#39; => $content,
                    &#39;email&#39;=>Str::random(10).&#39;@gmail.com&#39;,
                    &#39;password&#39;=>Hash::make(&#39;password&#39;),
                ]);
            });
    }
}
ログイン後にコピー

2. パイプライン部分

ディレクトリ構造は次のとおりです:
├─app
│  │  User.php
│  ├─Http
│  │  ...
│  │
│  ├─Models
│  │  ...
│  │
│  ├─Pipes
│  │  │  BothSidesWords.php
│  │  │  LeftWords.php
│  │  │  RightWords.php
│  │  │
│  │  └─Contracts
│  │          PipeContracts.php
ログイン後にコピー

#インターフェイスのコード
    パス
  • app/Pipes/Contracts/Pipe.php

    のコードは次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&lt;?php namespace App\Pipes\Contracts; use Closure; interface PipeContracts { public function handle($body, Closure $next); }</pre><div class="contentsignin">ログイン後にコピー</div></div>3 つのパイプ クラスのコード

    LeftWords.php
  • のコード
  • <?php
    namespace App\Pipes;
    
    use App\Pipes\Contracts\PipeContracts;
    use Closure;
    
    class LeftWords implements PipeContracts{
        public function handle($body, Closure $next)
        {
            // TODO: Implement handle() method.
    
            $body = &#39;left-&#39;.$body;
    
            return $next($body);
        }
    }
    ログイン後にコピー

    LeftWords.php<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;?php namespace App\Pipes; use App\Pipes\Contracts\PipeContracts; use Closure; class RightWords implements PipeContracts{ public function handle($body, Closure $next) { // TODO: Implement handle() method. $body = $body.&amp;#39;-right&amp;#39;; return $next($body); } }</pre><div class="contentsignin">ログイン後にコピー</div></div> のコード BothSidesWords.php

    <?php
    namespace App\Pipes;
    
    use App\Pipes\Contracts\PipeContracts;
    use Closure;
    
    class BothSidesWords implements PipeContracts{
        public function handle($body, Closure $next)
        {
            // TODO: Implement handle() method.
    
            $body = &#39;[&#39;.$body.&#39;]&#39;;
    
            return $next($body);
        }
    }
    ログイン後にコピー
    のコードここではパイプを使用しますデフォルトのメソッドハンドル
  • 、メソッド名をカスタマイズできます。次のように処理メソッド名として
myHandleMethod

を定義します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">return app(Pipeline::class) -&gt;send($name) -&gt;through($this-&gt;pipes) -&gt;via(&amp;#39;myHandleMethod&amp;#39;) -&gt;then(function ($content) { return User::create([ &amp;#39;name&amp;#39; =&gt; $content, &amp;#39;email&amp;#39;=&gt;Str::random(10).&amp;#39;@gmail.com&amp;#39;, &amp;#39;password&amp;#39;=&gt;Hash::make(&amp;#39;password&amp;#39;), ]); });</pre><div class="contentsignin">ログイン後にコピー</div></div>このように定義したら、interface を変更し、同時に実装クラスも変更します。

3. 結果の説明

http://localhost/pipe?name=lisa にアクセスすると、取得された結果が正常に出力されます。

User

テーブルには、正常に保存されたデータがあります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">{ &quot;name&quot;: &quot;[left-lisa-right]&quot;, &quot;email&quot;: &quot;3riSrDuBFv@gmail.com&quot;, &quot;updated_at&quot;: &quot;2020-09-05T05:57:14.000000Z&quot;, &quot;created_at&quot;: &quot;2020-09-05T05:57:14.000000Z&quot;, &quot;id&quot;: 15 }</pre><div class="contentsignin">ログイン後にコピー</div></div>プログラミング関連の知識については、<code>プログラミング ビデオをご覧ください。 !

以上がLaravel でパイプラインを使用する方法を例を通して学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート