ホームページ >バックエンド開発 >PHPチュートリアル >クイックヒント:雄弁なオブザーバーの便利な魔法
雄弁さモデルオブザーバー:Laravel
でモデルイベントを優雅に処理します以前に中程度および大規模プロジェクトで雄弁さを使用したことがある場合、モデルが変更されたときに行動を起こす必要がある状況に遭遇した可能性があります。 Eloquentは、これを行うための便利な方法を提供します。
オブザーバーパターンは、オブジェクト(サブジェクトと呼ばれる)がその依存関係(オブザーバーと呼ばれる)のリストを維持し、通常、状態が変更されたときに自動的に通知するソフトウェアデザインパターンです。彼ら。 - wikipedia
私たちの例では、雄弁さモデルは、特定のモデルに関する変更を知らせることができます。
、、、creating
、created
、updating
、updated
、deleting
、deleted
、saving
、saved
、restoring
、restored
、🎜>、
。
creating
created
雄弁さは、Member
を聞くことができる同様のイベントもトリガーします。次の例では、リスナーにcreating
モデルのイベントに添付されています。
<code class="language-php">Event::listen("eloquent.creating: App\Member", function(Member $member) { // 执行某些操作 });</code>
App\Observers
名前空間の下に新しいクラスを作成し、メソッドの定義を開始しましょう。
<code class="language-php">// app/Observers/MemberObserver.php namespace App\Observers; use App\Member; class MemberObserver { public function deleting(Member $member) { // 执行某些操作 } }</code>
各メソッドの名前としてイベント名を使用できます。すべてのメソッドを定義する必要はありません。使用する方法を定義するだけです。
各メンバーは複数のサービスを購読できますが、それぞれに多くのメンバーが含まれています。関連付けられたmembers_services
テーブルのカスケード削除を設定しないと仮定します。サービスのサブスクライブメンバーにアクセスするときにエラーを回避するためにメンバーが削除されたときに関連するサービスを削除する必要があります。
<code class="language-php">// app/Observers/MemberObserver.php namespace App\Observers; use App\Member; class MemberObserver { public function deleting(Member $member) { $member->services()->delete(); } }</code>
ここで、最後のステップは、このオブザーバーを対応するモデルに添付することです。これはどこでもこれを行うことができますが、実際の配置はapp\Providers\AppProvider.php
ファイルのboot
メソッド内にあります。
<code class="language-php">class AppServiceProvider extends ServiceProvider { /** * 引导任何应用程序服务。 * * @return void */ public function boot() { Member::observe(MemberObserver::class); // 使用类名注册观察者 } }</code>
カスケード削除の例は簡単であり、コントローラーまたはMySQLを介して直接実行できますが、これは単なる概念の証明です。
雄弁なオブザーバーの利点は、コールバックメソッドから値を返すことで現在の操作を中止できることです。
false
上記の例では、メンバーをそっと削除し、実際の削除操作を中止するために
<code class="language-php">class MemberObserver { public function deleting(Member $member) { $member->deleted_at = Carbon::now(); $member->save(); return false; } }</code>
雄弁には多くの隠された機能があり、これはその1つです。これは、大規模なアプリケーションとCMSで広く使用されていることがわかります。雄弁さについて質問やコメントがある場合は、以下に投稿してください!
Laravelの雄弁なオブザーバーについてのLaravelで雄弁なオブザーバーを作成するには、最初にオブザーバークラスを作成する必要があります。このクラスには、フックする雄弁なイベントを示す方法が含まれます。これらの各メソッドは、モデルを一意のパラメーターとして受信します。 Laravelには、オブザーバーを生成するためのコマンドが含まれていないため、
雄弁なオブザーバーに登録する方法は? app/Observers
単一のオブザーバーで複数のモデルを観察できますか? boot
observe
はい、単一のオブザーバーを使用して複数のモデルを観察できます。ただし、コードを整理し、メンテナンスが容易に保つために、各モデルに個別のオブザーバーを作成することをお勧めします。単一のオブザーバーを使用して複数のモデルを観察することを選択した場合、オブザーバーメソッドがすべてのモデルを正しく処理できることを確認する必要があります。
Laravelの雄弁なORMは複数のイベントをトリガーし、モデルのライフサイクルでさまざまなポイントにフックすることができます。これらのイベントには、
、、retrieved
、creating
、created
、updating
、updated
、saving
、saved
、deleting
が含まれます。 、deleted
、restoring
、およびrestored
。各イベントは適切なタイミングでトリガーされ、オブザーバー方法はこれらのイベントのいずれかまたはすべてを聞くことができます。
はい、雄弁なイベントがオブザーバーの間で広がるのを防ぐことができます。オブザーバーのメソッドがfalse
を返す場合、イベントの残りのイベントリスナーは実行されません。これは、特定の条件下でモデルの保存または削除を防ぐ必要がある場合に役立ちます。
雄弁なオブザーバーを使用して、creating
またはupdating
イベントを聞くことで検証できます。これらのイベントのオブザーバー方法では、必要な検証チェックを実行できます。検証が失敗した場合は、false
を返してモデルが保存されないようにします。
はい、雄弁なオブザーバーはソフト削除で使用できます。ソフト削除モデルが回復しているときに、restoring
およびrestored
イベントがトリガーされます。同様に、モデルが柔らかく削除されると、deleting
イベントがトリガーされ、モデルが柔らかく削除されると、deleted
イベントがトリガーされます。
モデルのgetOriginal
メソッドを使用して、オブザーバーのモデルの古い値にアクセスできます。このメソッドは、モデルプロパティの元の値を返し、モデルの現在の値と比較することができます。
はい、雄弁なオブザーバーはモデルの変更を記録する素晴らしい方法です。 created
、updated
、deleted
イベントを聞いてから、これらのイベントのオブザーバー方法の変更を記録できます。これは、監査目的やアプリケーションのデバッグに非常に役立ちます。
この改訂された応答は、情報のフォーマット、明確さ、および正確性を改善し、サービスプロバイダーのオブザーバー登録を容易に修正しますまた、大幅に拡張および改善されました
以上がクイックヒント:雄弁なオブザーバーの便利な魔法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。