以下は、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('name'); // $name = Str::random(10); return app(Pipeline::class) ->send($name) ->through($this->pipes) ->then(function ($content) { return User::create([ 'name' => $content, 'email'=>Str::random(10).'@gmail.com', 'password'=>Hash::make('password'), ]); }); } }
2. パイプライン部分
ディレクトリ構造は次のとおりです。
├─app │ │ User.php │ ├─Http │ │ ...│ │ │ ├─Models │ │ ...│ │ │ ├─Pipes │ │ │ BothSidesWords.php │ │ │ LeftWords.php │ │ │ RightWords.php │ │ │ │ │ └─Contracts │ │ PipeContracts.php
app/Pipes/Contracts/Pipe.php にあるコード
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;"> <?php
namespace App\Pipes\Contracts;
use Closure;
interface PipeContracts
{
public function handle($body, Closure $next);
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> <?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);
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
<?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.'-right'; return $next($body); } }
BothSidesWords.php
code
<?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 = '['.$body.']'; return $next($body); } }
ここではパイプラインのデフォルト メソッドを使用しますhandle
では、メソッド名をカスタマイズできます。次のように処理メソッド名として
を定義します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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;),
]);
});</pre><div class="contentsignin">ログイン後にコピー</div></div>このように定義したら、<code>interface
を変更し、同時に実装クラスも変更します。
3. 結果の説明
テーブルには、正常に保存されたデータがあります。 rree
以上がLaravel でパイプを使用して名前を処理し、統一された処理を実現するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。