Rumah pembangunan bahagian belakang tutorial php Bagaimana & Bila Untuk Menggunakan Pendengar Acara dalam Contoh Kod Praktikal Laravel

Bagaimana & Bila Untuk Menggunakan Pendengar Acara dalam Contoh Kod Praktikal Laravel

Aug 16, 2024 am 07:03 AM

How & When To Use Event Listeners in Laravel  Practical Code Examples

Sistem acara Laravel adalah luar biasa apabila berurusan dengan data yang kompleks dalam apl web kami kerana ia merupakan asas untuk membina apl yang dipisahkan dan sangat kompleks. Panduan ini memberitahu perkara yang sangat terperinci tentang pelaksanaan dan penggunaan pendengaran acara terutamanya pada tahun 2024, memberikan perspektif baharu dengan kandungan yang paling luas dan contoh kod terperinci pendengar acara dalam Laravel 11.

*(A) Memahami Teras Di Sebalik Peristiwa dan Pendengar
*

JADI, MARI KITA PECAHKANNYA, peristiwa dalam Laravel mewakili kejadian tertentu dalam apl. Pendengar ialah kelas yang akan bertindak balas kepada semua acara apl tersebut. Corak ini terus mempromosikan pengasingan kebimbangan dan telah membenarkan kod yang lebih modular dan boleh diuji.

*(B) Mencipta Acara
*

Mari kita mulakan dengan mencipta acara yang kompleks untuk itu kita akan menggunakan perintah Artisan untuk menerangkan dengan lebih baik, kami sangat menyarankan anda untuk melakukannya juga

php artisan make:event OrderPlaced

Arahan ini akan menjana kelas acara baharu dalam direktori apl/Acara. Mari kita periksa kelas acara yang lebih terperinci

`ruang nama AppEvents;

gunakan AppModelsOrder;
gunakan AppModelsUser;
gunakan IlluminateFoundationEventsDispatchable;
gunakan IlluminateQueueSerializesModels;
gunakan IlluminateBroadcastingInteractsWithSockets;
gunakan IlluminateBroadcastingPrivateChannel;
gunakan IlluminateContractsBroadcastingShouldBroadcast;

kelas OrderPlaced melaksanakan ShouldBroadcast
{
gunakan Dispatchable, InteractsWithSockets, SerializesModels;

public $order;
public $user;

/**
 * Create a new event instance.
 *
 * @param  \App\Models\Order  $order
 * @param  \App\Models\User  $user
 * @return void
 */
public function __construct(Order $order, User $user)
{
    $this->order = $order;
    $this->user = $user;
}

/**
 * Get the channels the event should broadcast on.
 *
 * @return \Illuminate\Broadcasting\Channel|array
 */
public function broadcastOn()
{
    return new PrivateChannel('orders.'.$this->user->id);
}

/**
 * The event's broadcast name.
 *
 * @return string
 */
public function broadcastAs()
{
    return 'order.placed';
}
Salin selepas log masuk

}`

Dalam contoh yang diperluaskan ini, kami telah memasukkan kedua-dua model Pesanan dan Pengguna. Ciri SerializesModels telah memastikan model Eloquent kami disiri dan dinyahsiri dengan betul apabila acara itu diserahkan kepada pendengar yang beratur. Kami juga telah melaksanakan antara muka ShouldBroadcast dan mentakrifkan kaedah broadcastOn dan broadcastAs, membenarkan acara ini disiarkan ke soket web untuk kemas kini masa nyata.

*Mencipta Berbilang Pendengar
*

Untuk satu acara, kami mungkin mahukan berbilang pendengar. Marilah kami mencipta dua pendengar untuk acara OrderPlaced kami untuk mengembangkan contoh selanjutnya. Saya hanya mahu anda semua memastikan anda mendapat intipati segala-galanya. Jadi, untuk itu sila lihat contoh kod di bawah

php artisan make:listener SendOrderConfirmation --event=OrderPlaced
php artisan make:listener UpdateInventory --event=OrderPlaced

Jadi sekarang anda akan faham bahawa baris arahan ini akan memberikan kami beberapa kelas pendengar baharu dalam direktori aplikasi/Pendengar kami. Sekarang perkaranya ialah, di bawah ini, kami akan memeriksa pendengar SendOrderConfirmation dan melihat bagaimana ia berkembang lebih jauh

`ruang nama AppListeners;

gunakan AppEventsOrderPlaced;
gunakan AppMailOrderConfirmation;
gunakan IlluminateContractsQueueShouldQueue;
gunakan IlluminateQueueInteractsWithQueue;
gunakan IlluminateSupportFacadesMail;
gunakan IlluminateSupportFacadesLog;

kelas SendOrderConfirmation melaksanakan ShouldQueue
{
gunakan InteractsWithQueue;

/**
 * The number of times the job may be attempted.
 *
 * @var int
 */
public $tries = 3;

/**
 * Handle the event.
 *
 * @param  \App\Events\OrderPlaced  $event
 * @return void
 */
public function handle(OrderPlaced $event)
{
    $order = $event->order;
    $user = $event->user;

    try {
        Mail::to($user->email)->send(new OrderConfirmation($order));
        Log::info('Order confirmation email sent', ['order_id' => $order->id, 'user_id' => $user->id]);
    } catch (\Exception $e) {
        Log::error('Failed to send order confirmation email', ['order_id' => $order->id, 'user_id' => $user->id, 'error' => $e->getMessage()]);
        $this->fail($e);
    }
}

/**
 * Handle a job failure.
 *
 * @param  \App\Events\OrderPlaced  $event
 * @param  \Throwable  $exception
 * @return void
 */
public function failed(OrderPlaced $event, $exception)
{
    Log::error('Order confirmation listener failed', ['order_id' => $event->order->id, 'user_id' => $event->user->id, 'error' => $exception->getMessage()]);
}
Salin selepas log masuk

}`

Pendengar ini telah melaksanakan antara muka ShouldQueue, yang menunjukkan bahawa ia harus beratur. Kami telah menambah pengendalian ralat, pengelogan dan menentukan kaedah yang gagal untuk menangani kegagalan. Sifat $tries akan ditetapkan untuk membenarkan beberapa percubaan sekiranya berlaku kegagalan.
Sekarang, mari kita lihat pada pendengar UpdateInventory

`ruang nama AppListeners;

gunakan AppEventsOrderPlaced;
gunakan IlluminateContractsQueueShouldQueue;
gunakan IlluminateQueueInteractsWithQueue;
gunakan IlluminateSupportFacadesDB;
gunakan IlluminateSupportFacadesLog;

UpdateInventory kelas melaksanakan ShouldQueue
{
gunakan InteractsWithQueue;

/**
 * Handle the event.
 *
 * @param  \App\Events\OrderPlaced  $event
 * @return void
 */
public function handle(OrderPlaced $event)
{
    $order = $event->order;

    DB::transaction(function () use ($order) {
        foreach ($order->items as $item) {
            $product = $item->product;

            if ($product->stock < $item->quantity) {
                throw new \Exception("Insufficient stock for product: {$product->id}");
            }

            $product->decrement('stock', $item->quantity);
            Log::info("Inventory updated", ['product_id' => $product->id, 'quantity' => $item->quantity]);
        }
    });
}

/**
 * Handle a job failure.
 *
 * @param  \App\Events\OrderPlaced  $event
 * @param  \Throwable  $exception
 * @return void
 */
public function failed(OrderPlaced $event, $exception)
{
    Log::error('Failed to update inventory', ['order_id' => $event->order->id, 'error' => $exception->getMessage()]);
}
Salin selepas log masuk

}`

Sekarang, anda akan faham bahawa, pendengar ini ada atas sebab seperti menaik taraf inventori berdasarkan item pesanan dll. Kami telah membungkus kemas kini inventori dalam transaksi pangkalan data untuk memastikan konsistensi data. Kami juga telah menambah semakan ralat untuk mengelakkan stok negatif dan menyertakan pengelogan untuk kemas kini dan kegagalan yang berjaya.

*Mendaftarkan Acara & Pendengar
*

Kami akan mendaftarkan acara dan pendengar ini dalam EventServiceProvider

`gunakan AppEventsOrderPlaced;
gunakan AppListenersSendOrderConfirmation;
gunakan AppListenersUpdateInventory;

class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
OrderPlaced::class => [
SendOrderConfirmation::class,
UpdateInventory::class,
],
];

/**
 * Register any events for your application.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    //
}
Salin selepas log masuk

}`

Dispatching Events:

We can dispatch the event from a controller or service class

`use App\Events\OrderPlaced;
use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class OrderController extends Controller
{
/**
* Place a new order.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function placeOrder(Request $request)
{
$user = auth()->user();

    DB::transaction(function () use ($request, $user) {
        $order = Order::create($request->all());
        $order->user()->associate($user);
        $order->save();

        event(new OrderPlaced($order, $user));
    });

    return response()->json(['message' => 'Order placed successfully', 'order_id' => $order->id]);
}
Salin selepas log masuk

}`

In this example, we have wrapped the order creation and event dispatching in a database transaction to ensure that both occur successfully or not at all.

Atas ialah kandungan terperinci Bagaimana & Bila Untuk Menggunakan Pendengar Acara dalam Contoh Kod Praktikal Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
24
Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1? Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

PHP dalam Tindakan: Contoh dan aplikasi dunia nyata PHP dalam Tindakan: Contoh dan aplikasi dunia nyata Apr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan? Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Relevannya PHP: Adakah ia masih hidup? Relevannya PHP: Adakah ia masih hidup? Apr 14, 2025 am 12:12 AM

PHP masih dinamik dan masih menduduki kedudukan penting dalam bidang pengaturcaraan moden. 1) kesederhanaan PHP dan sokongan komuniti yang kuat menjadikannya digunakan secara meluas dalam pembangunan web; 2) fleksibiliti dan kestabilannya menjadikannya cemerlang dalam mengendalikan borang web, operasi pangkalan data dan pemprosesan fail; 3) PHP sentiasa berkembang dan mengoptimumkan, sesuai untuk pemula dan pemaju yang berpengalaman.

PHP vs Bahasa Lain: Perbandingan PHP vs Bahasa Lain: Perbandingan Apr 13, 2025 am 12:19 AM

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.

PHP dan Python: Paradigma yang berbeza dijelaskan PHP dan Python: Paradigma yang berbeza dijelaskan Apr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

See all articles