Rumah > Artikel > rangka kerja php > Ketahui tentang Pipeline dalam Laravel dalam satu artikel
Artikel ini akan membawa anda melalui Pipeline di Laravel dan bercakap tentang paradigma reka bentuk saluran paip saya harap ia akan membantu anda!
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('request', $request); Facade::clearResolvedInstance('request'); $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.
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.
$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(['content' => 'content']); }); // 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('customMethodName') // <---- This one :) ->then(function ($content) { return Post::create(['content' => $content]); });
$pipes
$post = app(Pipeline::class) ->send($request->all()) ->through($pipes) ->then(function ($content) { return Post::create(['content' => $content]); });
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!