簡體   English   中英

在 Laravel 5.7 事件偵聽器中運行 Javascript

[英]Running Javascript in Laravel 5.7 event listener

我正在嘗試在用戶登錄時運行一個 javascript 庫 Noty。 我已經注冊了該活動並遵循了此處的文檔。 但是,我嘗試使用 echo 發送 javascript,但代碼並未從我所見的范圍內執行。 工作流程是在Home登錄后會彈出一個通知,表示歡迎。

這是我的EventServiceProvider

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        'Illuminate\Auth\Events\Login' => ['App\Listeners\UserEventListener@onUserLogin']
    ];

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


    }
}

UserEventListener

class UserEventListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  Login  $event
     * @return void
     */
    public function handle(Login $event)
    {

    }

    public function onUserLogin($event) {
         echo("<script>
            $(document).ready(function() {
                    new Noty({
                    text: 'Welcome {{Auth::user()->name}}! 😁',
                    type:'info',
                    layout: 'centerRight',
                    timeout:2000
                })
                .on('onShow', function() {
                        var audio = new Audio('/sounds/appointed.mp3');
                        audio.play();
                    }).show();
            });
        </script>");
        echo("adad");
    }
}

用 Laravel 顯示消息似乎是一種非常奇怪的方法。

你可以簡單地在你的登錄控制器中使用這一行

return redirect('your/path')->with('success', 'your message here');

在刀片模板的某處執行簡單檢查:

@if (\Session::has('success'))
    <script>
            $(document).ready(function() {
                    new Noty({
                    text: 'Welcome {{ Auth::user()->name }}',
                    type:'info',
                    layout: 'centerRight',
                    timeout:2000
                })
                .on('onShow', function() {
                        var audio = new Audio('/sounds/appointed.mp3');
                        audio.play();
                    }).show();
            });
        </script>
@endif

您可以將通知代碼放在通用(例如布局)模板中,因此如果用戶會話中有消息,它將在任何地方觸發通知

您嘗試執行的操作似乎不可能,因為偵聽器不會呈現任何 HTML 頁面(代碼將在何處執行),而只會執行一些 PHP 代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM