Maison  >  Article  >  cadre php  >  Apprenez à utiliser les pipelines dans Laravel à travers des exemples

Apprenez à utiliser les pipelines dans Laravel à travers des exemples

青灯夜游
青灯夜游avant
2021-10-11 11:09:412056parcourir

La colonne tutorielle suivante de Laravel vous guidera à travers le pipeline dans Laravel et partagera un exemple d'utilisation du pipeline dans Laravel. J'espère qu'elle sera utile à tout le monde !

Apprenez à utiliser les pipelines dans Laravel à travers des exemples

Présentation de l'utilisation réelle des pipelines du point de vue du code. Il existe de nombreuses informations sur les pipelines sur Internet, alors vérifiez-les par vous-même. Ce blog utilise des pipelines pour traiter les noms afin d'obtenir un traitement unifié.

Contexte : Il existe actuellement de nombreuses introductions à l'utilisation des pipelines. La plupart d'entre elles se concentrent uniquement sur l'introduction et les conseils, et il n'y a pas beaucoup de parties qui approfondissent réellement le code. Selon l'introduction, il existe certains obstacles à l'utilisation des pipelines. Voici un exemple de code détaillé sur l'utilisation des pipelines à titre de référence uniquement. Cette introduction est un extrait de code du processus que j'ai réellement utilisé, je l'ai testé moi-même et il est réellement utilisable. Juste pour attirer l’attention, ne critiquez pas si vous n’aimez pas ça.

1. Contrôleur

Partie routeur

Route::get('/pipe', ['as'=>'pipe', 'uses'=>'PipeController@index']);

Code de contrôle

<?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. Partie pipeline

La structure du répertoire est la suivante :

├─app
│  │  User.php
│  ├─Http
│  │  ...
│  │
│  ├─Models
│  │  ...
│  │
│  ├─Pipes
│  │  │  BothSidesWords.php
│  │  │  LeftWords.php
│  │  │  RightWords.php
│  │  │
│  │  └─Contracts
│  │          PipeContracts.php
  • Code interface Le code sous le chemin app/Pipes/Contracts/Pipe.php est le suivant : 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
}

Le code des trois classes de tuyaux LeftWords.php Le code de rrreeeLeftWords.phprrreeeBothSidesWords.phpLe code rrreeeIci nous utilisons la méthode par défaut du pipeline handle, vous pouvez personnaliser le nom de la méthode. Définissez myHandleMethod comme nom de méthode de traitement comme suit.

rrreee🎜Après l'avoir défini ainsi, modifiez votre interface et modifiez votre classe d'implémentation en même temps. 🎜

🎜3. Description des résultats🎜🎜🎜Après avoir accédé à http://localhost/pipe?name=lisa, les résultats obtenus peuvent être imprimés avec succès. Des données ont été enregistrées avec succès dans la table Utilisateur. 🎜rrreee🎜Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéo de programmation🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer