首頁 > php框架 > Laravel > Laravel使用管道處理名字, 實現統一處理

Laravel使用管道處理名字, 實現統一處理

藏色散人
發布: 2020-09-08 09:17:43
轉載
2335 人瀏覽過
##上「使用中的管道」的資料中使用範例,並希望為需要的朋友提供幫助!

從程式碼的角度介紹管道的實際使用方式。有關管道的說明,網路上已有較多的篇幅介紹,自行查閱。

本篇部落格是使用管道處理名字, 實現統一處理的目的。

Laravel使用管道處理名字, 實現統一處理背景:

目前能找到的使用管道的介紹也很多,大多停留在對其介紹和引導,真正的深入到程式碼的部分不多。根據介紹,使用管道也有一定的阻礙,這裡分享一篇關於使用管道的詳細的程式碼實例,僅供參考。

本篇介紹是自己真實使用的過程的程式碼摘錄,親自測試,真實可用。只為拋磚引玉,不喜勿噴。


一、控制器

路由器部分

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;),
                ]);
            });
    }
}
登入後複製

二、管道部分

目錄結構如下:

├─app
│  │  User.php
│  ├─Http
│  │  ...│  │
│  ├─Models
│  │  ...│  │
│  ├─Pipes
│  │  │  BothSidesWords.php
│  │  │  LeftWords.php
│  │  │  RightWords.php
│  │  │
│  │  └─Contracts
│  │          PipeContracts.php
登入後複製

interface

的程式碼
    路徑
  • app/Pipes/Contracts/Pipe.php

    下的程式碼如下:

     <?php
     namespace App\Pipes\Contracts;
    
     use Closure;
    
     interface PipeContracts
     {
         public function handle($body, Closure $next);
     }
    登入後複製

    三個管道的類別的程式碼
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

    的程式碼
  •   <?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.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);
     }
 }
登入後複製

這裡我們使用管道預設的方法

handle ,你可以自訂方法名稱。像下面這樣定義myHandleMethod

為處理方法名稱。

return app(Pipeline::class)
        ->send($name)
        ->through($this->pipes)
        ->via(&#39;myHandleMethod&#39;)
        ->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;),
            ]);
        });
登入後複製
你這樣定義後,修改你的interface,同時修改你的實作類別即可。

三、結果說明

造訪

http://localhost/pipe?name=lisa之後,能成功列印出所獲得的結果。 User

表內部,有資料儲存成功。

{
"name": "[left-lisa-right]",
"email": "3riSrDuBFv@gmail.com",
"updated_at": "2020-09-05T05:57:14.000000Z",
"created_at": "2020-09-05T05:57:14.000000Z",
"id": 15
}
登入後複製

以上是Laravel使用管道處理名字, 實現統一處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板