


Bagaimana & Bila Untuk Menggunakan Pendengar Acara dalam Contoh Kod Praktikal Laravel
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'; }
}`
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()]); }
}`
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()]); }
}`
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(); // }
}`
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]); }
}`
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











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 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 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 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.

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.

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 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 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.
