Rumah >rangka kerja php >Laravel >Ketahui tentang Pipeline dalam Laravel dalam satu artikel

Ketahui tentang Pipeline dalam Laravel dalam satu artikel

青灯夜游
青灯夜游ke hadapan
2022-11-16 20:49:571794semak imbas

Artikel ini akan membawa anda melalui Pipeline di Laravel dan bercakap tentang paradigma reka bentuk saluran paip saya harap ia akan membantu anda!

Ketahui tentang Pipeline dalam Laravel dalam satu artikel

Secara amnya, dengan menggunakan paip dalam Laravel, anda boleh menghantar objek dengan lancar antara beberapa kelas untuk melaksanakan apa-apa jenis tugasan Selepas semua tugasan dilaksanakan, nilai hasil akan dikembalikan.

Seterusnya, anda boleh mengetahui lebih lanjut tentang talian paip Laravel.

Mengenai cara saluran paip dijalankan, contoh yang paling jelas sebenarnya ialah salah satu komponen yang paling biasa digunakan dalam rangka kerja itu sendiri. Ya, saya bercakap tentang perisian tengah.

Middleware menyediakan mekanisme yang mudah untuk menapis permintaan HTTP yang memasuki aplikasi anda.

Perisian tengah asas sepatutnya kelihatan seperti ini:

<?php
namespace App\Http\Middleware;
use Closure;
class TestMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Here you can add your code
        return $next($request);
    }
}

"perisian tengah" ini sebenarnya adalah saluran paip, yang melaluinya permintaan dihantar untuk melaksanakan sebarang tugas yang diperlukan. Di sini, anda boleh menyemak sama ada permintaan itu adalah permintaan HTTP, sama ada permintaan JSON, sama ada terdapat maklumat pengguna yang disahkan, dsb.

Jika anda ingin melihat dengan pantas kelas IlluminateFoundationHttpKernel, anda akan melihat cara menggunakan tika baharu kelas Pipeline untuk melaksanakan perisian tengah.

/**
  * Send the given request through the middleware / router.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
protected function sendRequestThroughRouter($request)
{
    $this->app->instance(&#39;request&#39;, $request);
    Facade::clearResolvedInstance(&#39;request&#39;);
    $this->bootstrap();
    return (new Pipeline($this->app))
                    ->send($request)
                    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter());
}

Anda boleh melihat sesuatu seperti ini dalam kod: paip baharu yang menghantar permintaan melalui senarai perisian tengah dan kemudian menghantar laluan.

Jangan risau jika perkara ini kelihatan agak menggembirakan anda. Mari kita cuba menjelaskan konsep ini menggunakan contoh berikut.

Mengendalikan kelas larian berbilang tugas

Mari kita lihat senario. Katakan anda menyediakan forum di mana orang boleh menyiarkan dan mengulas. Walau bagaimanapun, pengguna anda meminta anda mengalih keluar teg secara automatik atau mengedit teg pada setiap kandungan semasa ia dibuat.

Apa yang anda diminta lakukan pada ketika ini adalah seperti berikut:

  • Ganti teg pautan dengan teks biasa; >Ganti teg pautan dengan "* ”Ganti perkataan sensitif;

  • Alih keluar teg skrip sepenuhnya daripada kandungan.

  • Mungkin anda akhirnya akan membuat kelas untuk mengendalikan "tugas" ini.

Apa yang kami lakukan ialah menghantar "kandungan" yang diberikan kepada setiap tugasan dan kemudian mengembalikan hasilnya kepada tugasan seterusnya. Kita boleh menggunakan saluran paip untuk melakukan ini.

$pipes = [
    RemoveBadWords::class
    ReplaceLinkTags::class
    RemoveScriptTags::class
];
Setiap kelas "tugas" harus mempunyai kaedah "pemegang" untuk melaksanakan operasi. Mungkin mempunyai kekangan bersatu untuk setiap kelas ialah pilihan yang baik:

<?php

public function create(Request $request)
{
    $pipes = [
        RemoveBadWords::class,
        ReplaceLinkTags::class,
        RemoveScriptTags::class
    ];
    $post = app(Pipeline::class)
        ->send($request->content)
        ->through($pipes)
        ->then(function ($content) {
            return Post::create([&#39;content&#39; => &#39;content&#39;]);
        });
    // return any type of response
}

Menamakan ialah perkara yang sukar ¯_(ツ)_/¯
<?php

namespace App;

use Closure;

interface Pipe
{
    public function handle($content, Closure $next);
}

Kaedah yang digunakan untuk melaksanakan tugas harus menerima dua parameter Parameter pertama ialah objek yang layak, dan parameter kedua ialah penutupan seterusnya (fungsi tanpa nama) yang akan diambil alih selepas operasi semasa diproses.

<?php

namespace App;

use Closure;

class RemoveBadWords implements Pipe
{
    public function handle($content, Closure $next)
    {
        // Here you perform the task and return the updated $content
        // to the next pipe
        return  $next($content);
    }
}
Anda boleh menggunakan nama kaedah tersuai dan bukannya "pemegang". Kemudian anda perlu menentukan nama kaedah yang akan digunakan oleh saluran paip, seperti:

Apakah kesan akhir?
app(Pipeline::class)
 ->send($content)
 ->through($pipes)
 ->via(&#39;customMethodName&#39;) // <---- This one :)
 ->then(function ($content) {
     return Post::create([&#39;content&#39; => $content]);
 });

Kandungan yang diserahkan akan diproses oleh setiap , dan hasil yang diproses akan disimpan.

$pipes

Kesimpulan
$post = app(Pipeline::class)
    ->send($request->all())
    ->through($pipes)
    ->then(function ($content) {
        return Post::create([&#39;content&#39; => $content]);
    });

Ingat, terdapat banyak cara untuk menyelesaikan masalah jenis ini. Bagaimana untuk memilih, ia bergantung kepada pilihan anda sendiri. Hanya tahu bahawa anda boleh menggunakan alat ini apabila diperlukan. Saya harap contoh ini memberi anda pemahaman yang lebih baik tentang "talian paip Laravel" dan cara menggunakannya. Jika anda ingin mengetahui atau mengetahui lebih lanjut, anda boleh menyemak dokumentasi API Laravel laravel.com/api/5.4/Illuminate/Pip...

Alamat asal: https: //medium.com/@jeffochoa/understanding-laravel-pipelines-a7191f75c351

Alamat terjemahan: https://learnku.com/laravel/t/7543/pipeline-pipeline-design-paradigm-in-laravel

[Cadangan berkaitan:

tutorial video laravel

]

Atas ialah kandungan terperinci Ketahui tentang Pipeline dalam Laravel dalam satu artikel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam