Laravel でパイプを使用して名前を処理し、統一された処理を実現する

藏色散人
リリース: 2020-09-08 09:17:43
転載
2323 人が閲覧しました

以下は、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
ログイン後にコピー

interface
    code
  • パス

    app/Pipes/Contracts/Pipe.php にあるコード
    <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;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
  • コード


    <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 LeftWords implements PipeContracts{ public function handle($body, Closure $next) { // TODO: Implement handle() method. $body = &amp;#39;left-&amp;#39;.$body; return $next($body); } }</pre><div class="contentsignin">ログイン後にコピー</div></div>

    LeftWords.php
  • code
  <?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.&#39;-right&#39;;

         return $next($body);
     }
 }
ログイン後にコピー

BothSidesWords.phpcode

  <?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);
     }
 }
ログイン後にコピー

ここではパイプラインのデフォルト メソッドを使用しますhandle では、メソッド名をカスタマイズできます。次のように処理メソッド名として

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>このように定義したら、<code>interface を変更し、同時に実装クラスも変更します。

3. 結果の説明

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

User

テーブルには、正常に保存されたデータがあります。 rree

以上がLaravel でパイプを使用して名前を処理し、統一された処理を実現するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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