Laravel モデルイベントを使用すると、モデルのライフサイクルの複数のキーポイントを監視したり、モデルの保存や削除を防ぐこともできます。 Laravel モデルイベントのドキュメントでは、フックを使用して対応するイベントを関連イベントタイプに関連付ける方法の概要が説明されていますが、この記事の主な焦点は、イベントとリスナーの構築とセットアップであり、いくつかの追加の詳細も含まれます。
イベント概要
Eloquent には、フックを使用してイベントを接続し、モデルにカスタム機能を追加できるイベントが多数あります。モデルは次のイベントで始まります:
retrieved
creating
created
updating
updated
Saving
saved
deleting
deleted
restoreing
restored
これらについては、ドキュメントから学ぶことができます。どのように実装されていますか? Model の基本クラスを入力して、どのように実装されているかを確認することもできます:
既存のモデルがデータベースから取得されると、取得されたイベントがトリガーされます。新しいモデルを初めて保存すると、作成イベントと作成イベントが発生します。データベースにすでに存在するモデルに対して save メソッドが呼び出された場合、更新/更新イベントがトリガーされます。いずれにせよ、どちらの場合でも、保存 / 保存されたイベントが発生します。
このドキュメントでは、モデル イベントの概要を示し、フックを使用してイベントを関連付ける方法について説明していますが、初心者であるか、フックを使用してイベント リスナーをこれらのカスタマイズに接続する方法に慣れていない場合は、モデル イベントは次のとおりです。関連する場合は、この記事をさらに読んでください。
イベントの登録
モデル内でイベントを関連付けるには、最初に $dispatchesEvents プロパティを使用してイベント オブジェクトを登録する必要があります。最終的には、fireModelEvent() メソッドによって呼び出される HasEvents::fireCustomModelEvent() メソッドによってトリガーされます。元の fireCustomModelEvent() メソッドはおおよそ次のとおりです。
/** * 为给定的事件触发一个自定义模型。 * * @param string $event * @param string $method * @return mixed|null */ protected function fireCustomModelEvent($event, $method) { if (! isset($this->dispatchesEvents[$event])) { return; } $result = static::$dispatcher->$method(new $this->dispatchesEvents[$event]($this)); if (! is_null($result)) { return $result; } }
delete などのいくつかのイベントが検出され、イベントが false を返して操作を終了するかどうかが判断されます。たとえば、このフックを使用して何らかの検出を行い、ユーザーの作成または削除を防ぐことができます。
例として App\User モデルを使用して、モデル イベントを構成する方法を示します:
protected $dispatchesEvents = [ 'saving' => \App\Events\UserSaving::class, ];
artisan make:event コマンドを使用してこのイベントを作成できますが、基本的には次のとおりです。最終的には次のようになります。
<?php namespace App\Events; use App\User; use Illuminate\Queue\SerializesModels; class UserSaving { use SerializesModels; public $user; /** * 创建一个新的事件实例 * * @param \App\User $user */ public function __construct(User $user) { $this->user = $user; } }
私たちのイベントは、保存イベント中に User モデル インスタンスにアクセスできるように、パブリック $user プロパティを提供します。
これを機能させるために次に行う必要があるのは、このイベントの実際のリスナーを設定することです。モデルのトリガー時間を設定し、User モデルが保存イベントをトリガーすると、リスナーが呼び出されます。
イベント リスナーの作成
次に、User モデルを定義し、トリガーされる保存イベントをリッスンするイベント リスナーを登録します。モデル オブザーバーを使用するとこれをすぐに実行できましたが、個々のイベント トリガーのイベント リスナーを構成する手順を説明したいと思います。
イベント リスナー Laravel の他のイベント リスナーと同様に、handle() メソッドは App\Events\UserSaving イベント クラスのインスタンスを受け取ります。
手動で作成することも、phpArtisan make:listener コマンドを使用することもできます。とにかく、次のようなリスナー クラスを作成します。
<?php namespace App\Listeners; use App\Events\UserSaving as UserSavingEvent; class UserSaving { /** * 处理事件。 * * @param \App\Events\UserSavingEvent $event * @return mixed */ public function handle(UserSavingEvent $event) { app('log')->info($event->user); } }
リスナーに渡されたモデルを簡単に検査できるように、ログ呼び出しを追加しました。これを行うには、EventServiceProvider::$listen プロパティにリスナーを登録する必要もあります。
<?php namespace App\Providers; use Illuminate\Support\Facades\Event; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * 应用的事件监听器。 * * @var array */ protected $listen = [ \App\Events\UserSaving::class => [ \App\Listeners\UserSaving::class, ], ]; // ... }
これで、モデルが保存イベントを呼び出すと、登録したイベント リスナーもトリガーされて実行されます。
イベント モニタリングを試してみる
ティンカー セッションを通じてイベント モニタリング コードをすぐに生成できます:
php artisan tinker >>> factory(\App\User::class)->create(); => App\User {#794 name: "Aiden Cremin", email: "josie05@example.com", updated_at: "2018-03-15 03:57:18", created_at: "2018-03-15 03:57:18", id: 2, }
イベントとリスナーを正しく登録した場合は、 laravel.log ファイルでモデルの JSON 式を確認できるはずです。
[2018-03-15 03:57:18] local.INFO: {"name":"Aiden Cremin","email":"josie05@example.com"}
注意すべき点の 1 つは、現時点ではモデルには created_at または updated_at 属性がないことです。モデル上で save() が再度呼び出される場合、新しく作成されたレコードまたは既存のレコードに対して保存イベントが発生するため、ログにタイムスタンプを持つ新しいレコードが作成されます。
>>> $u = factory(\App\User::class)->create(); => App\User {#741 name: "Eloisa Hirthe", email: "gottlieb.itzel@example.com", updated_at: "2018-03-15 03:59:37", created_at: "2018-03-15 03:59:37", id: 3, } >>> $u->save(); => true >>>
保存を停止します。操作
一部のモデル イベントでは、ブロック操作を実行できます。ばかげた例を挙げると、どのユーザーのモデルも属性 $user->name を保存できないとします。内容は Paul:
/** * 处理事件。 * * @param \App\Events\UserSaving $event * @return mixed */ public function handle(UserSaving $event) { if (stripos($event->user->name, 'paul') !== false) { return false; } }
Eloquent の Model::save() メソッドでは、イベント監視の戻り結果により、保存を停止するかどうかが決まります:
public function save(array $options = []) { $query = $this->newQueryWithoutScopes(); // 如果 "saving" 事件返回 false ,我们将退出保存并返回 // false,表示保存失败。这为服务监听者提供了一个机会, // 当验证失败或者出现其它任何情况,都可以取消保存操作。 if ($this->fireModelEvent('saving') === false) { return false; }
この save() は良い例です。これは、モデルのライフ サイクルでイベントをカスタマイズし、ログ データの記録を受動的に実行する方法を示しています。またはタスクのスケジュール設定。
オブザーバーの使用
複数のイベントをリッスンしている場合は、オブザーバー クラスを使用してイベントをタイプ別にグループ化すると便利な場合があります。 Eloquent オブザーバーの例を次に示します。
<?php namespace App\Observers; use App\User; class UserObserver { /** * 监听 User 创建事件。 * * @param \App\User $user * @return void */ public function created(User $user) { // } /** * 监听 User 删除事件。 * * @param \App\User $user * @return void */ public function deleting(User $user) { // } }
サービス プロバイダー AppServiceProvider の boot() メソッドでオブザーバーを登録できます。
/** * 运行所有应用服务。 * * @return void */ public function boot() { User::observe(UserObserver::class); }
推荐教程:《Laravel教程》
以上がLaravel モデルイベントのクイックスタートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Laravelは、Web開発プロセスを簡素化し、強力な機能を提供することで際立っています。その利点には、1)簡潔な構文と強力なORMシステム、2)効率的なルーティングと認証システム、3)豊富なサードパーティライブラリサポート。開発者はエレガントなコードの作成に集中し、開発効率を向上させることができます。

laravelispredomintylyabackendframework、Designeforerver-sidelogic、databasemanagement、およびapidevelopmentが、BladeTemplatesで開発されたものです。

LaravelとPythonには、パフォーマンスとスケーラビリティの点で独自の利点と短所があります。 Laravelは非同期処理とキューイングシステムを通じてパフォーマンスを向上させますが、PHPの制限により、高い並行性が存在する場合はボトルネックがある場合があります。 Pythonは、非同期フレームワークと強力なライブラリエコシステムでうまく機能しますが、Multi-Threaded環境のGILの影響を受けます。

Laravelは、チームがPHPに精通しており、豊富な機能を必要とするプロジェクトに適していますが、Python Frameworksはプロジェクトの要件に依存します。 1.Laravelは、迅速な開発と柔軟性を必要とするプロジェクトに適したエレガントな構文とリッチな機能を提供します。 2。Djangoは、「バッテリー包含」の概念のため、複雑なアプリケーションに適しています。 3.Flaskは、高速プロトタイプや小規模プロジェクトに適しており、柔軟性が非常に高くなります。

Laravelは、フロントエンド開発に使用できます。 1)ブレードテンプレートエンジンを使用して、HTMLを生成します。 2)Viteを統合して、フロントエンドリソースを管理します。 3)SPA、PWA、または静的Webサイトを構築します。 4)ルーティング、ミドルウェア、Eloquentormを組み合わせて、完全なWebアプリケーションを作成します。

PHPとLaravelを使用して、効率的なサーバー側アプリケーションを構築できます。 1.PHPは、Web開発に適したオープンソーススクリプト言語です。 2.Laravelは、ルーティング、コントローラー、Eloquentorm、ブレードテンプレートエンジン、および開発を簡素化するためのその他の機能を提供します。 3.キャッシュ、コードの最適化、セキュリティ対策により、アプリケーションのパフォーマンスとセキュリティを改善します。 4.アプリケーションの安定した動作を確保するためのテストおよび展開戦略。

LaravelとPythonには、学習曲線と使いやすさの点で独自の利点と短所があります。 Laravelは、Webアプリケーションの迅速な発展に適しています。学習曲線は比較的フラットですが、高度な機能をマスターするには時間がかかります。 Pythonの文法は簡潔で、学習曲線はフラットですが、動的なタイプのシステムは注意する必要があります。

バックエンド開発におけるLaravelの利点には、次のものがあります。1)エレガントな構文とEloquentorm開発プロセスを簡素化します。 2)豊富な生態系と積極的なコミュニティサポート。 3)開発効率とコードの品質の向上。 Laravelの設計により、開発者は強力な機能とツールを通じてより効率的に開発し、コードの品質を向上させることができます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
