Jadual Kandungan
Pemberitahuan
Pengguna mengikuti pemberitahuan
menandakan pemberitahuan sebagai bacaan
Menunjukkan pemberitahuan
javascript dan sass
Pemberitahuan Post Baru
pergi masa nyata dengan penolak
Soalan Lazim (Soalan Lazim) mengenai Pemberitahuan Masa Nyata di Laravel dengan Pusher
Bagaimanakah saya dapat menyelesaikan masalah dengan integrasi Laravel dan penolak? Perkara pertama yang perlu anda lakukan ialah menyemak fail .Env anda untuk memastikan bahawa kelayakan aplikasi pusher anda dimasukkan dengan betul. Jika kelayakan adalah betul, anda boleh menggunakan konsol debug penolak untuk memeriksa sebarang kesilapan. Sekiranya anda masih menghadapi masalah, anda boleh menggunakan ciri pembalakan terbina dalam Laravel untuk log sebarang kesilapan yang berlaku semasa proses penyiaran. Ini dapat membantu anda menentukan dengan tepat di mana masalah ini berlaku. Penolak menyediakan API REST yang boleh anda gunakan untuk menghantar pemberitahuan ke peranti mudah alih. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan pemberitahuan ini. Apabila acara disiarkan, anda boleh menangkapnya dalam aplikasi mudah alih anda dan memaparkan pemberitahuan. sisi klien, bukan di sisi pelayan. Ini bermakna anda perlu menggunakan JavaScript, CSS, atau mana-mana teknologi klien lain untuk menyesuaikan pemberitahuan anda. Pusher menyediakan perpustakaan JavaScript yang boleh anda gunakan untuk mendengar acara dan pemberitahuan paparan. Anda boleh menggunakan perpustakaan ini dalam kombinasi dengan CSS anda sendiri untuk menyesuaikan rupa pemberitahuan anda. menggunakan ciri ujian terbina dalam Laravel. Anda boleh menulis ujian yang mencetuskan acara dan kemudian menggunakan konsol debug penolak untuk memeriksa sama ada acara itu disiarkan. Anda juga boleh menulis ujian untuk memeriksa sama ada pendengar acara anda berfungsi dengan betul.
Bolehkah saya menggunakan Laravel dan penolak untuk aplikasi sembang masa nyata? aplikasi. Penolak menyediakan fungsi masa nyata yang boleh anda gunakan untuk menghantar dan menerima mesej dengan serta-merta. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan mesej ini.
Bagaimanakah saya dapat mengendalikan kesilapan dalam integrasi Laravel dan penolak saya? Anda boleh menangkap apa -apa pengecualian yang berlaku semasa proses penyiaran dan mengendalikannya dengan sewajarnya. Anda juga boleh menggunakan konsol debug penolak untuk memeriksa sebarang kesilapan. acara yang anda siarkan. Penyiaran terlalu banyak acara boleh melambatkan permohonan anda dan mengambil banyak sumber. Anda juga boleh mengoptimumkan integrasi anda dengan menggunakan sistem giliran Laravel untuk mengendalikan peristiwa di latar belakang. aplikasi streaming langsung. Pusher menyediakan fungsi masa nyata yang boleh anda gunakan untuk menyiarkan aliran video secara langsung. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan aliran ini. Anda boleh menggunakan ciri -ciri ini untuk menjejaki bilangan mesej yang anda hantar, bilangan sambungan yang anda miliki, dan metrik penting lain. Anda juga boleh menggunakan ciri pembalakan terbina dalam Laravel untuk log apa-apa kesilapan yang berlaku semasa proses penyiaran.
Rumah pembangunan bahagian belakang tutorial php Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak

Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak

Feb 09, 2025 am 11:58 AM

Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak

Artikel ini dikaji semula oleh Rafie Younes dan Wern Ancheta. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk membuat kandungan SitePoint yang terbaik boleh!


Pengguna web moden mengharapkan untuk dimaklumkan tentang segala yang berlaku dalam permohonan. Anda tidak mahu menjadi satu laman web yang tidak mempunyai dropdown pemberitahuan yang dijumpai bukan hanya di semua laman web media sosial, tetapi di mana -mana sahaja hari ini juga.

bernasib baik, dengan Laravel dan penolak, melaksanakan fungsi ini adalah angin. Kod yang akan kami tulis dalam tutorial ini boleh didapati di sini.

Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak imej melalui pusher.com

Takeaways Key

    Gunakan Laravel dan penolak untuk melaksanakan pemberitahuan masa nyata dan meningkatkan interaksi pengguna dengan memberikan maklum balas segera mengenai aktiviti pengguna.
  • Pusher memudahkan integrasi fungsionaliti bi-arah masa nyata menggunakan WebSockets, yang lebih cekap daripada mengundi pelayan pada selang dengan Ajax.
  • Sediakan aplikasi blog Laravel yang mudah, konfigurasikan pangkalan data MySQL, dan gunakan migrasi untuk membuat sistem pengikut untuk interaksi pengguna.
  • Gunakan sistem pemberitahuan terbina dalam Laravel untuk menghantar pemberitahuan mengenai pengikut dan jawatan baru, meningkatkan keupayaan interaksi dinamik aplikasi.
  • Melaksanakan pemberitahuan masa nyata dengan penolak, membolehkan pemberitahuan diterima dengan serta-merta apabila peristiwa berlaku, tanpa perlu menyegarkan halaman.
  • selamatkan aplikasi masa nyata dengan menggunakan saluran peribadi dan pengesahan untuk memastikan pemberitahuan hanya diterima oleh pengguna yang dimaksudkan.
Pemberitahuan masa nyata

Untuk memberi pengguna pengalaman yang baik, pemberitahuan harus ditunjukkan dalam masa nyata. Satu pendekatan adalah menghantar permintaan Ajax secara berkala ke hujung belakang dan mengambil pemberitahuan terbaru jika mereka wujud.

Pendekatan yang lebih baik adalah untuk memanfaatkan kuasa WebSockets, dan menerima pemberitahuan ketika mereka dihantar. Inilah yang akan kita gunakan dalam tutorial ini.

PUSHER

Pusher adalah perkhidmatan web untuk

... mengintegrasikan fungsi bi-arah masa nyata melalui websocket ke web dan aplikasi mudah alih.

Ia mempunyai API yang sangat mudah, tetapi kami akan menggunakannya lebih mudah dengan Penyiaran Laravel dan Laravel Echo.

Dalam tutorial ini, kami akan menambah pemberitahuan masa nyata ke blog yang sedia ada. Fungsi asas adalah serupa dengan pemberitahuan Larave masa nyata dengan aliran. Kami akan bermula dengan repo ini yang dibuat oleh Christopher Vundi (saya mengubahnya hanya sedikit) yang merupakan blog mudah di mana pengguna yang boleh melakukan crud pada jawatan.

Projek

Inisialisasi

Pertama kita akan mengklon blog Laravel yang mudah:

<span>git clone https://github.com/vickris/simple-blog
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

maka kami akan membuat pangkalan data MySQL dan menubuhkan pembolehubah persekitaran untuk memberikan akses aplikasi ke pangkalan data.

mari salin env.example ke .env dan kemas kini pembolehubah berkaitan pangkalan data.

<span>cp .env.example .env
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

.env

Sekarang mari kita pasang kebergantungan projek dengan

<span>composer install
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
dan jalankan perintah penghijrahan dan pembenihan untuk mengisi pangkalan data dengan beberapa data:

php artisan migrate <span>--seed
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika anda menjalankan aplikasi dan lawatan /jawatan, anda akan dapat melihat penyenaraian jawatan yang dihasilkan. Semak permohonan, daftar pengguna, dan buat beberapa siaran. Ia adalah aplikasi yang sangat asas, tetapi melayani demo kami dengan sempurna.

Ikuti Hubungan Pengguna

kami ingin memberi pengguna keupayaan untuk mengikuti pengguna lain, dan diikuti oleh pengguna, jadi kami perlu membuat banyak hubungan antara pengguna untuk membuatnya berlaku.

Mari buat jadual pivot yang berkaitan dengan pengguna kepada pengguna. Buat penghijrahan pengikut baru:

php artisan make:migration create_followers_table <span>--create=followers
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
kita perlu menambah beberapa bidang ke penghijrahan itu: user_id untuk mewakili pengguna yang mengikuti, dan medan berikut untuk mewakili pengguna yang diikuti.

Kemas kini penghijrahan seperti berikut:

<span>public function up()
</span><span>{
</span>    <span>Schema<span>::</span>create('followers', function (Blueprint $table) {
</span>        <span>$table->increments('id');
</span>        <span>$table->integer('user_id')->index();
</span>        <span>$table->integer('follows_id')->index();
</span>        <span>$table->timestamps();
</span>    <span>});
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Sekarang mari kita berhijrah untuk membuat jadual:

php artisan migrate
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika anda telah mengikuti artikel pendekatan aliran, anda akan mendapati bahawa perkara -perkara hampir sama sehingga ke tahap ini. Di bahagian yang berikut, kita akan mencapai fungsi ikut yang sama dengan pendekatan yang berbeza.

mari kita tambahkan kaedah hubungan ke model pengguna.

<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function followers() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'follows_id', 'user_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span>
    <span>public function follows() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'user_id', 'follows_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
app/user.php

Sekarang model pengguna mempunyai hubungan yang diperlukan, pengikut mengembalikan semua pengikut pengguna, dan mengikuti pulangan semua orang yang pengguna ikut.

kami akan memerlukan beberapa fungsi penolong untuk membolehkan pengguna mengikuti pengguna lain, dan untuk memeriksa sama ada pengguna mengikuti pengguna tertentu.

<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function follow($userId) 
</span>    <span>{
</span>        <span>$this->follows()->attach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function unfollow($userId)
</span>    <span>{
</span>        <span>$this->follows()->detach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function isFollowing($userId) 
</span>    <span>{
</span>        <span>return (boolean) $this->follows()->where('follows_id', $userId)->first(['id']);
</span>    <span>}
</span>
<span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
app/user.php

sempurna. Dengan set model, sudah tiba masanya untuk menyenaraikan pengguna.

Penyenaraian pengguna

mari kita mulakan dengan menetapkan laluan yang diperlukan

<span>//...
</span><span>Route<span>::</span>group(['middleware' => 'auth'], function () {
</span>    <span>Route<span>::</span>get('users', 'UsersController@index')->name('users');
</span>    <span>Route<span>::</span>post('users/{user}/follow', 'UsersController@follow')->name('follow');
</span>    <span>Route<span>::</span>delete('users/{user}/unfollow', 'UsersController@unfollow')->name('unfollow');
</span><span>});
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Laluan/web.php

Kemudian, sudah tiba masanya untuk membuat pengawal baru untuk pengguna:

php artisan make:controller UsersController
Salin selepas log masuk
Salin selepas log masuk
kami akan menambah kaedah indeks kepadanya:

<span>// ...
</span><span>use App<span>\User</span>;
</span><span>class UsersController extends Controller
</span><span>{
</span>    <span>//..
</span>    <span>public function index()
</span>    <span>{
</span>        <span>$users = User<span>::</span>where('id', '!=', auth()->user()->id)->get();
</span>        <span>return view('users.index', compact('users'));
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
app/http/controllers/usercontroller.php

Kaedah memerlukan pandangan. Mari buat pengguna.Index View dan letakkan markup ini di dalamnya:

@<span>extends('layouts.app')
</span>
@<span>section('content')
</span>    <span><div class="container">
</span>        <span><div class="col-sm-offset-2 col-sm-8">
</span>
            <span><!-- Following -->
</span>            <span><div class="panel panel-default">
</span>                <span><div class="panel-heading">
</span>                    All Users
                <span></div>
</span>
                <span><div class="panel-body">
</span>                    <span><table class="table table-striped task-table">
</span>                        <span><thead>
</span>                        <span><th>User</th>
</span>                        <span><th> </th>
</span>                        <span></thead>
</span>                        <span><tbody>
</span>                        @<span>foreach ($users as $user)
</span>                            <span><tr>
</span>                                <span><td clphpass="table-text"><div>{{ $user->name }}</div></td>
</span>                                @<span>if (auth()->user()->isFollowing($user->id))
</span>                                    <span><td>
</span>                                        <span><form action="{{route('unfollow', ['id' => <span><span>$user->id</span>])}}"</span> method="POST">
</span>                                            <span>{{ csrf_field() }}
</span>                                            <span>{{ method_field('DELETE') }}
</span>
                                            <span><button type="submit" id="delete-follow-{{ <span><span>$user->id</span> }}"</span> class="btn btn-danger">
</span>                                                <span><i class="fa fa-btn fa-trash"></i>Unfollow
</span>                                            <span></button>
</span>                                        <span></form>
</span>                                    <span></td>
</span>                                @<span>else
</span>                                    <span><td>
</span>                                        <span><form action="{{route('follow', ['id' => <span><span>$user->id</span>])}}"</span> method="POST">
</span>                                            <span>{{ csrf_field() }}
</span>
                                            <span><button type="submit" id="follow-user-{{ <span><span>$user->id</span> }}"</span> class="btn btn-success">
</span>                                                <span><i class="fa fa-btn fa-user"></i>Follow
</span>                                            <span></button>
</span>                                        <span></form>
</span>                                    <span></td>
</span>                                @<span>endif
</span>                            <span></tr>
</span>                        @<span>endforeach
</span>                        <span></tbody>
</span>                    <span></table>
</span>                <span></div>
</span>            <span></div>
</span>        <span></div>
</span>    <span></div>
</span>@endsection
Salin selepas log masuk
sumber/paparan/pengguna/index.blade.php

Anda kini boleh melawat halaman /pengguna untuk melihat penyenaraian pengguna.

untuk diikuti, atau tidak dapat diikuti

UserController tidak mempunyai kaedah mengikuti dan tidak dapat diikuti. Mari kita lakukan untuk membungkus bahagian ini.

<span>//...
</span><span>class UsersController extends Controller
</span><span>{
</span>    <span>//...
</span>    <span>public function follow(User $user)
</span>    <span>{
</span>        <span>$follower = auth()->user();
</span>        <span>if ($follower->id == $user->id) {
</span>            <span>return back()->withError("You can't follow yourself");
</span>        <span>}
</span>        <span>if(!$follower->isFollowing($user->id)) {
</span>            <span>$follower->follow($user->id);
</span>
            <span>// sending a notification
</span>            <span>$user->notify(new UserFollowed($follower));
</span>
            <span>return back()->withSuccess("You are now friends with <span><span>{$user->name}</span>"</span>);
</span>        <span>}
</span>        <span>return back()->withError("You are already following <span><span>{$user->name}</span>"</span>);
</span>    <span>}
</span>
    <span>public function unfollow(User $user)
</span>    <span>{
</span>        <span>$follower = auth()->user();
</span>        <span>if($follower->isFollowing($user->id)) {
</span>            <span>$follower->unfollow($user->id);
</span>            <span>return back()->withSuccess("You are no longer friends with <span><span>{$user->name}</span>"</span>);
</span>        <span>}
</span>        <span>return back()->withError("You are not following <span><span>{$user->name}</span>"</span>);
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
app/http/controllers/usercontroller.php

Kami selesai dengan fungsi berikut. Kami kini boleh mengikuti dan tidak mengikuti pengguna dari halaman /pengguna.

Pemberitahuan

Laravel menyediakan API untuk menghantar pemberitahuan melalui pelbagai saluran. E -mel, SMS, pemberitahuan web, dan apa -apa jenis pemberitahuan yang lain boleh dihantar menggunakan kelas pemberitahuan.

Kami akan mempunyai dua jenis pemberitahuan:

  • ikut pemberitahuan: dihantar kepada pengguna apabila mereka diikuti oleh pengguna lain
  • Pemberitahuan Pos yang Dibuat: Dihantar kepada pengikut pengguna yang diberikan apabila mereka membuat jawatan baru

Pengguna mengikuti pemberitahuan

Menggunakan arahan Artisan, kita boleh menjana penghijrahan untuk pemberitahuan:

<span>git clone https://github.com/vickris/simple-blog
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

mari kita berhijrah dan buat jadual baru ini.

<span>cp .env.example .env
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kami bermula dengan pemberitahuan berikut. Mari kita laksanakan arahan ini untuk menghasilkan kelas pemberitahuan:

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

maka kami akan mengemas kini fail kelas pemberitahuan yang baru saja kami buat:

<span>composer install
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

App/pemberitahuan/userfollowed.php

Dengan beberapa baris kod ini kita dapat mencapai banyak. Mula -mula kita memerlukan contoh pengikut $ disuntik apabila pemberitahuan ini dibuat.

Menggunakan kaedah VIA, kami memberitahu Laravel untuk menghantar pemberitahuan ini melalui saluran pangkalan data. Apabila Laravel menemui ini, ia akan mencipta rekod baru dalam jadual pemberitahuan.

jenis user_id dan pemberitahuan ditetapkan secara automatik, ditambah kita boleh melanjutkan Pemberitahuan dengan lebih banyak data. Itulah yang Todatabase untuk. Arahan yang dikembalikan akan ditambah ke medan data pemberitahuan.

Akhirnya, dengan melaksanakan ConflyQueue, Laravel secara automatik akan meletakkan pemberitahuan ini di dalam barisan untuk dilaksanakan di latar belakang, yang akan mempercepatkan respons. Ini masuk akal kerana kami akan menambah panggilan HTTP apabila kami menggunakan penolak kemudian.

mari kita mulakan pemberitahuan apabila pengguna diikuti.

php artisan migrate <span>--seed
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/http/controllers/usercontroller.php

kita boleh memanggil kaedah pemberitahuan pada model pengguna kerana ia sudah menggunakan sifat yang dapat diberi perhatian. Mana -mana model yang ingin anda maklumkan harus menggunakannya untuk mendapatkan akses kepada kaedah pemberitahuan.

menandakan pemberitahuan sebagai bacaan

Pemberitahuan akan mengandungi beberapa maklumat dan pautan ke sumber. Sebagai contoh: Apabila pengguna menerima pemberitahuan mengenai jawatan baru, pemberitahuan itu harus menunjukkan teks bermaklumat, mengalihkan pengguna ke jawatan apabila diklik, dan dibenderakan seperti yang dibaca.

kami akan membuat middleware yang memeriksa jika permintaan mempunyai? Baca = NOTIFICATION_ID Input dan bendera sebagai bacaan.

mari kita buat middleware dengan arahan berikut:

php artisan make:migration create_followers_table <span>--create=followers
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Kemudian, mari letakkan kod ini di dalam kaedah pemegang middleware:

<span>public function up()
</span><span>{
</span>    <span>Schema<span>::</span>create('followers', function (Blueprint $table) {
</span>        <span>$table->increments('id');
</span>        <span>$table->integer('user_id')->index();
</span>        <span>$table->integer('follows_id')->index();
</span>        <span>$table->timestamps();
</span>    <span>});
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
app/http/middleware/marknotificationAsread.php

Untuk mendapatkan middleware kami untuk dilaksanakan untuk setiap permintaan, kami akan menambahkannya ke $ middlewareGroups.

<span>git clone https://github.com/vickris/simple-blog
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/http/kernel.php

Dengan yang dilakukan, mari kita tunjukkan beberapa pemberitahuan.

kita perlu menunjukkan penyenaraian pemberitahuan menggunakan AJAX, kemudian kemas kini dalam masa nyata dengan penolak. Pertama, mari tambahkan kaedah pemberitahuan kepada pengawal:

<span>cp .env.example .env
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/http/controllers/usercontroller.php

Ini akan mengembalikan 5 pemberitahuan terakhir yang belum dibaca. Kami hanya perlu menambah laluan untuk menjadikannya mudah. ​​

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Laluan/web.php

Sekarang tambahkan dropdown untuk pemberitahuan di tajuk.

<span>composer install
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

sumber/paparan/susun atur/app.blade.php

Kami juga telah menambah pembolehubah window.laravel.userid global di dalam skrip untuk mendapatkan ID pengguna semasa.

javascript dan sass

Kami akan menggunakan campuran Laravel untuk menyusun JavaScript dan Sass. Pertama, kita perlu memasang pakej NPM.

php artisan migrate <span>--seed
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sekarang mari tambahkan kod ini ke dalam app.js:

php artisan make:migration create_followers_table <span>--create=followers
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

Ini hanya permulaan. Kami akan menggunakan pemberitahuan untuk menyimpan semua objek pemberitahuan sama ada mereka diambil melalui AJAX atau PUSHER.

anda mungkin meneka, notifikasi_types mengandungi jenis pemberitahuan.

Seterusnya, mari kita "dapatkan" pemberitahuan melalui Ajax.

<span>public function up()
</span><span>{
</span>    <span>Schema<span>::</span>create('followers', function (Blueprint $table) {
</span>        <span>$table->increments('id');
</span>        <span>$table->integer('user_id')->index();
</span>        <span>$table->integer('follows_id')->index();
</span>        <span>$table->timestamps();
</span>    <span>});
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

Dengan ini, kami mendapat pemberitahuan terkini dari API kami dan meletakkannya di dalam lungsur turun.

Di dalam penambahan kita menyatukan pemberitahuan sekarang dengan yang baru menggunakan Lodash, dan hanya mengambil 5 terbaru yang akan ditunjukkan.

Kami memerlukan beberapa lagi fungsi untuk menyelesaikan tugas.
php artisan migrate
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

Fungsi ini membina rentetan semua pemberitahuan dan meletakkannya di dalam jatuh turun. Sekiranya tiada pemberitahuan diterima, ia hanya menunjukkan "tiada pemberitahuan".

Ia juga menambah kelas ke butang dropdown, yang hanya akan mengubah warna apabila pemberitahuan wujud. Ia agak seperti pemberitahuan GitHub.

Akhirnya, beberapa fungsi penolong untuk membuat rentetan pemberitahuan.

<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function followers() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'follows_id', 'user_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span>
    <span>public function follows() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'user_id', 'follows_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

Sekarang kami hanya akan menambah ini ke fail app.scss kami:

<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function follow($userId) 
</span>    <span>{
</span>        <span>$this->follows()->attach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function unfollow($userId)
</span>    <span>{
</span>        <span>$this->follows()->detach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function isFollowing($userId) 
</span>    <span>{
</span>        <span>return (boolean) $this->follows()->where('follows_id', $userId)->first(['id']);
</span>    <span>}
</span>
<span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

App/Sumber/Aset/SASS/APP.SCSS

mari kita menyusun aset:

<span>//...
</span><span>Route<span>::</span>group(['middleware' => 'auth'], function () {
</span>    <span>Route<span>::</span>get('users', 'UsersController@index')->name('users');
</span>    <span>Route<span>::</span>post('users/{user}/follow', 'UsersController@follow')->name('follow');
</span>    <span>Route<span>::</span>delete('users/{user}/unfollow', 'UsersController@unfollow')->name('unfollow');
</span><span>});
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Jika anda mencuba dan mengikuti pengguna sekarang, mereka akan mendapat pemberitahuan. Apabila mereka mengkliknya, mereka akan diarahkan ke /pengguna, ditambah dengan pemberitahuan akan hilang.

Pemberitahuan Post Baru

kami akan memberitahu pengikut apabila pengguna membuat jawatan baru.

mari kita mulakan dengan menjana kelas pemberitahuan.

<span>git clone https://github.com/vickris/simple-blog
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

mari kita mengemas kini kelas yang dihasilkan seperti berikut:

<span>cp .env.example .env
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

App/Notifications/Newarticle.php

Seterusnya, kita perlu menghantar pemberitahuan. Terdapat beberapa cara yang boleh kita lakukan ini. Saya suka menggunakan pemerhati yang fasih.

mari kita buat pemerhati untuk pos dan dengar peristiwa -peristiwa. Kami akan membuat kelas baru: app/pemerhati/postobserver.php

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kemudian, daftar pemerhati di AppServiceProvider:

<span>composer install
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/penyedia/appserviceProvider.php

Sekarang kita hanya perlu memformat mesej yang akan ditunjukkan dalam JS:

php artisan migrate <span>--seed
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

dan voilà! Pengguna mendapat pemberitahuan mengenai berikut dan jawatan baru! Teruskan dan cubalah!

pergi masa nyata dengan penolak

Sudah tiba masanya untuk menggunakan penolak untuk mendapatkan pemberitahuan secara real-time melalui WebSockets.

Daftar untuk Akaun Pusher Percuma di Pusher.com dan buat aplikasi baru.

php artisan make:migration create_followers_table <span>--create=followers
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Tetapkan pilihan akaun anda di dalam fail konfigurasi penyiaran:

<span>public function up()
</span><span>{
</span>    <span>Schema<span>::</span>create('followers', function (Blueprint $table) {
</span>        <span>$table->increments('id');
</span>        <span>$table->integer('user_id')->index();
</span>        <span>$table->integer('follows_id')->index();
</span>        <span>$table->timestamps();
</span>    <span>});
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Config/Broadcasting.php

maka kami akan mendaftarkan AppProvidersBroadCastServiceProvider dalam array penyedia.

php artisan migrate
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

config/app.php

kita harus memasang PHP SDK dan Laravel Echo sekarang:

<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function followers() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'follows_id', 'user_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span>
    <span>public function follows() 
</span>    <span>{
</span>        <span>return $this->belongsToMany(<span>self::</span>class, 'followers', 'user_id', 'follows_id')
</span>                    <span>->withTimestamps();
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
<span>// ...
</span>
<span>class extends Authenticatable
</span><span>{
</span>    <span>// ...
</span>
    <span>public function follow($userId) 
</span>    <span>{
</span>        <span>$this->follows()->attach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function unfollow($userId)
</span>    <span>{
</span>        <span>$this->follows()->detach($userId);
</span>        <span>return $this;
</span>    <span>}
</span>
    <span>public function isFollowing($userId) 
</span>    <span>{
</span>        <span>return (boolean) $this->follows()->where('follows_id', $userId)->first(['id']);
</span>    <span>}
</span>
<span>}
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

kita perlu menetapkan data pemberitahuan untuk disiarkan. Mari kita mengemas kini pemberitahuan userfollowed:

<span>//...
</span><span>Route<span>::</span>group(['middleware' => 'auth'], function () {
</span>    <span>Route<span>::</span>get('users', 'UsersController@index')->name('users');
</span>    <span>Route<span>::</span>post('users/{user}/follow', 'UsersController@follow')->name('follow');
</span>    <span>Route<span>::</span>delete('users/{user}/unfollow', 'UsersController@unfollow')->name('unfollow');
</span><span>});
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

App/pemberitahuan/userfollowed.php

dan Newpost:

php artisan make:controller UsersController
Salin selepas log masuk
Salin selepas log masuk

App/Notifications/newPost.php

Perkara terakhir yang perlu kita lakukan ialah mengemas kini JS kami. Buka app.js dan tambahkan kod berikut

<span>// ...
</span><span>use App<span>\User</span>;
</span><span>class UsersController extends Controller
</span><span>{
</span>    <span>//..
</span>    <span>public function index()
</span>    <span>{
</span>        <span>$users = User<span>::</span>where('id', '!=', auth()->user()->id)->get();
</span>        <span>return view('users.index', compact('users'));
</span>    <span>}
</span><span>}
</span>
Salin selepas log masuk
Salin selepas log masuk

app/sumber/aset/js/app.js

Dan kami sudah selesai di sini. Pemberitahuan ditambah dalam masa nyata. Anda kini boleh bermain dengan aplikasinya dan melihat bagaimana pemberitahuan dikemas kini.

Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak

Kesimpulan

Pusher mempunyai API yang sangat mudah yang membuat menerima acara masa nyata sangat mudah. Ditambah dengan pemberitahuan Laravel, kami boleh menghantar pemberitahuan melalui pelbagai saluran (e -mel, SMS, kendur, dll) dari satu tempat. Dalam tutorial ini, kami menambah fungsi pengguna-pengguna ke blog yang mudah, dan meningkatkannya dengan alat-alat yang disebutkan di atas untuk mendapatkan beberapa fungsi masa nyata yang lancar.

Terdapat lebih banyak lagi untuk penolak dan pemberitahuan Laravel: Selaras, perkhidmatan membolehkan anda menghantar mesej pub/sub dalam masa nyata kepada pelayar, telefon bimbit, dan peranti IoT. Terdapat juga API kehadiran untuk mendapatkan status pengguna dalam talian/luar talian.

Sila periksa dokumentasi masing -masing (Dokumen Pusher, Tutorial Pusher, Dokumen Laravel) untuk meneroka mereka dengan lebih mendalam dan menggunakan potensi sebenar mereka.

izinkan saya mendengar apa yang telah anda bina dengan teknologi ini dalam komen.

Soalan Lazim (Soalan Lazim) mengenai Pemberitahuan Masa Nyata di Laravel dengan Pusher

Bagaimanakah saya dapat menyelesaikan masalah dengan integrasi Laravel dan penolak? Perkara pertama yang perlu anda lakukan ialah menyemak fail .Env anda untuk memastikan bahawa kelayakan aplikasi pusher anda dimasukkan dengan betul. Jika kelayakan adalah betul, anda boleh menggunakan konsol debug penolak untuk memeriksa sebarang kesilapan. Sekiranya anda masih menghadapi masalah, anda boleh menggunakan ciri pembalakan terbina dalam Laravel untuk log sebarang kesilapan yang berlaku semasa proses penyiaran. Ini dapat membantu anda menentukan dengan tepat di mana masalah ini berlaku. Penolak menyediakan API REST yang boleh anda gunakan untuk menghantar pemberitahuan ke peranti mudah alih. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan pemberitahuan ini. Apabila acara disiarkan, anda boleh menangkapnya dalam aplikasi mudah alih anda dan memaparkan pemberitahuan. sisi klien, bukan di sisi pelayan. Ini bermakna anda perlu menggunakan JavaScript, CSS, atau mana-mana teknologi klien lain untuk menyesuaikan pemberitahuan anda. Pusher menyediakan perpustakaan JavaScript yang boleh anda gunakan untuk mendengar acara dan pemberitahuan paparan. Anda boleh menggunakan perpustakaan ini dalam kombinasi dengan CSS anda sendiri untuk menyesuaikan rupa pemberitahuan anda. menggunakan ciri ujian terbina dalam Laravel. Anda boleh menulis ujian yang mencetuskan acara dan kemudian menggunakan konsol debug penolak untuk memeriksa sama ada acara itu disiarkan. Anda juga boleh menulis ujian untuk memeriksa sama ada pendengar acara anda berfungsi dengan betul.

Bagaimana saya dapat mengamankan integrasi Laravel dan penolak saya? data anda. Anda boleh menjamin integrasi anda dengan menggunakan saluran peribadi. Saluran peribadi memerlukan pengesahan, yang bermaksud bahawa hanya pengguna yang diberi kuasa boleh melanggannya. Anda boleh melaksanakan pengesahan menggunakan ciri pengesahan terbina dalam Laravel.

Bolehkah saya menggunakan Laravel dan penolak untuk aplikasi sembang masa nyata? aplikasi. Penolak menyediakan fungsi masa nyata yang boleh anda gunakan untuk menghantar dan menerima mesej dengan serta-merta. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan mesej ini.

Bagaimanakah saya dapat mengendalikan kesilapan dalam integrasi Laravel dan penolak saya? Anda boleh menangkap apa -apa pengecualian yang berlaku semasa proses penyiaran dan mengendalikannya dengan sewajarnya. Anda juga boleh menggunakan konsol debug penolak untuk memeriksa sebarang kesilapan. acara yang anda siarkan. Penyiaran terlalu banyak acara boleh melambatkan permohonan anda dan mengambil banyak sumber. Anda juga boleh mengoptimumkan integrasi anda dengan menggunakan sistem giliran Laravel untuk mengendalikan peristiwa di latar belakang. aplikasi streaming langsung. Pusher menyediakan fungsi masa nyata yang boleh anda gunakan untuk menyiarkan aliran video secara langsung. Anda boleh menggunakan ciri penyiaran acara Laravel untuk mencetuskan aliran ini. Anda boleh menggunakan ciri -ciri ini untuk menjejaki bilangan mesej yang anda hantar, bilangan sambungan yang anda miliki, dan metrik penting lain. Anda juga boleh menggunakan ciri pembalakan terbina dalam Laravel untuk log apa-apa kesilapan yang berlaku semasa proses penyiaran.

Atas ialah kandungan terperinci Cara menambah pemberitahuan masa nyata ke Laravel dengan penolak. 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!

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)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Apakah penghitungan (enums) dalam Php 8.1? Apakah penghitungan (enums) dalam Php 8.1? Apr 03, 2025 am 12:05 AM

Fungsi penghitungan dalam Php8.1 meningkatkan kejelasan dan jenis keselamatan kod dengan menentukan pemalar yang dinamakan. 1) Penghitungan boleh menjadi bilangan bulat, rentetan atau objek, meningkatkan kebolehbacaan kod dan keselamatan jenis. 2) Penghitungan adalah berdasarkan kelas dan menyokong ciri-ciri berorientasikan objek seperti traversal dan refleksi. 3) Penghitungan boleh digunakan untuk perbandingan dan tugasan untuk memastikan keselamatan jenis. 4) Penghitungan menyokong penambahan kaedah untuk melaksanakan logik kompleks. 5) Pemeriksaan jenis dan pengendalian ralat yang ketat boleh mengelakkan kesilapan biasa. 6) Penghitungan mengurangkan nilai sihir dan meningkatkan keupayaan, tetapi memberi perhatian kepada pengoptimuman prestasi.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah Prinsip Reka Bentuk API REST? Apakah Prinsip Reka Bentuk API REST? Apr 04, 2025 am 12:01 AM

Prinsip reka bentuk Restapi termasuk definisi sumber, reka bentuk URI, penggunaan kaedah HTTP, penggunaan kod status, kawalan versi, dan benci. 1. Sumber harus diwakili oleh kata nama dan dikekalkan pada hierarki. 2. Kaedah HTTP harus mematuhi semantik mereka, seperti GET digunakan untuk mendapatkan sumber. 3. Kod status hendaklah digunakan dengan betul, seperti 404 bermakna sumber tidak wujud. 4. Kawalan versi boleh dilaksanakan melalui URI atau header. 5. Boots Operasi Pelanggan Hateoas melalui pautan sebagai tindak balas.

Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Apr 05, 2025 am 12:03 AM

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Apakah kelas tanpa nama di PHP dan kapan anda boleh menggunakannya? Apakah kelas tanpa nama di PHP dan kapan anda boleh menggunakannya? Apr 04, 2025 am 12:02 AM

Fungsi utama kelas tanpa nama dalam PHP adalah untuk membuat objek satu kali. 1. Kelas tanpa nama membenarkan kelas tanpa nama ditakrifkan secara langsung dalam kod, yang sesuai untuk keperluan sementara. 2. Mereka boleh mewarisi kelas atau melaksanakan antara muka untuk meningkatkan fleksibiliti. 3. Beri perhatian kepada prestasi dan kebolehbacaan kod apabila menggunakannya, dan elakkan berulang kali menentukan kelas tanpa nama yang sama.

See all articles