【问题标题】:Laravel 7 - Why Toastr suddenly stopped displaying after I implement middleware?Laravel 7 - 为什么我实现中间件后 Toastr 突然停止显示?
【发布时间】:2020-06-19 07:16:48
【问题描述】:

我使用的是我在这里得到的一个 Toastr 插件TJGazel Laravel Toastr,它在我实现 Toastrs 的项目的所有部分都运行良好(所有这些都在我的所有控制器中实现)。

但是当我尝试将我的所有网络路由放入中间件时,它们停止显示,尽管 它没有在控制台、开发人员工具(网络选项卡)和 laravel 日志文件中显示任何类型的错误或消息强>。它们只是不显示/显示。

我对导致此问题的唯一提示是中间件,因为我有一个旧项目的副本(就在我实施中间件之前)并且我的旧项目中的所有 toastr 都可以正常工作。

这是我的路由的完整代码实现中间件的位置(web.php):

<?php

use Illuminate\Support\Facades\Route;
use Spatie\Activitylog\Models\Activity;

Auth::routes();

Route::get('/', function () {
    return view('welcome');
});

Route::view('unauthorized', 'unauthorized');
Route::get('/home', 'HomeController@index')->name('home');

Route::group(['middleware' => ['user_middleware']], function() //Group middleware for authenticated / logged-in users
{
Route::get('/logout', 'Auth\LoginController@logout');
Route::resource('master/vendor', 'Master\VendorController');
Route::get('vendor/datatable', 'Master\VendorController@datatable')->name('vendor/datatable');

Route::resource('master/product', 'Master\ProductController');
Route::get('product/datatable', 'Master\ProductController@datatable')->name('product/datatable');
Route::get('product/datatableTrash', 'Master\ProductController@datatableTrash')->name('product/datatableTrash');
Route::post('product/undoTrash/{id}', 'Master\ProductController@undoTrash')->name('product/undoTrash/{id}');
Route::get('master/product/history/{id}', 'Master\ProductController@history')->name('master/product/history/{id}');

Route::resource('transaction/purchase-order', 'Transaction\PurchaseController');
Route::get('transaction/purchase-order/vendor/popup_media', 'Transaction\PurchaseController@popup_media_vendor')->name('transaction/purchase-order/vendor/popup_media');
Route::get('transaction/purchase-order/product/popup_media/{id_count}', 'Transaction\PurchaseController@popup_media_product')->name('transaction/purchase-order/product/popup_media/{id_count}');
Route::get('browse-product/datatable', 'Master\ProductController@datatable_product')->name('browse-product/datatable');
Route::get('browse-vendor/datatable', 'Master\VendorController@datatable_vendor')->name('browse-vendor/datatable');
Route::get('purchase-order/datatable', 'Transaction\PurchaseController@datatable')->name('purchase-order/datatable');
Route::post('transaction/purchase-order/receive/{id}', 'Transaction\PurchaseController@received')->name('transaction/purchase-order/received/{id}');
Route::get('transaction/purchase-order/print/{id}', 'Transaction\SaleController@print')->name('transaction/purchase-order/print/{id}');

Route::resource('transaction/sales', 'Transaction\SaleController');
Route::get('transaction/sales/product/popup_media/{id_count}', 'Transaction\SaleController@popup_media_product')->name('transaction/sales/product/popup_media/{id_count}');
Route::get('sales/datatable', 'Transaction\SaleController@datatable')->name('sales/datatable');
Route::get('transaction/sales/print/{id}', 'Transaction\SaleController@print')->name('transaction/sales/print/{id}');

Route::get('transaction/stock', 'Transaction\StockController@index')->name('transaction/stock');
Route::get('transaction/stock/product/popup_media', 'Transaction\StockController@popup_media_product')->name('transaction/stock/product/popup_media');
Route::post('transaction/stock', 'Transaction\StockController@update')->name('transaction/stock');
Route::get('stock/report', 'Transaction\StockController@report')->name('stock/report');

Route::resource('user', 'UserController');
Route::get('/datatable_Activities', 'UserController@datatable_Activities')->name('datatable_Activities');
Route::get('/RecentActivities', 'UserController@RecentActivities')->name('RecentActivities');
Route::get('/password', 'UserController@Password');
//Route::get('/calendar', 'UserController@Calendar');
Route::post('user/updatePassword', 'UserController@updatePassword')->name('user.updatePassword');

});

这是我的UserMiddleware.php 代码:

<?php

namespace App\Http\Middleware;
use Closure;

class UserMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!$request->user())
        {
            return redirect('unauthorized');
        }
        return $next($request);
    }
}

当我尝试使用dd() 时,它显示了 Toastr 返回的内容并找到了它应该返回的值(我发现没有错误或警告消息)。同样,唯一的问题是它不显示 toastr。

这是我在我的一个控制器中实现的 Toastr:

Toastr::success('Product created Successfully', 'Success');
return redirect()->route('product.index');

我的布局文件 ('layouts.backend.app') 包含 toastr 所需的脚本和 css 文件(首先加载 JQuery,引导然后 Toastr - CSS 和 JS 文件)。而且我还在每个使用 @extends('layouts.backend.app') 的刀片文件中包含了 {!! toastr()-&gt;render() !!}

我一直在搜索与此问题相关的内容,但一无所获。 这可能是什么真正的原因,我该如何解决这个问题?

更新:

在调试时我发现使用return view() 时它可以工作,但是当涉及return redirect()-&gt;route('');return redirect()-&gt;back(); 时它不显示。

更新(2021 年 2 月 3 日):

问题似乎与我在路由中使用的中间件有关 (web.php),仍然不知道如何在不删除中间件的情况下修复它。

【问题讨论】:

  • 您能否将中间件的代码添加到问题中。
  • @Remul 它已经包含在内了 :)
  • 不包含user_middleware 的代码。那个中间件是做什么的?
  • 不是,请将你的中间件类的代码添加到问题中。
  • 我的错。我现在已经为 UserMiddleware 添加了源代码。 :)

标签: php laravel plugins routes toastr


【解决方案1】:

根据this 链接的引用,问题可能是由于 StartSession 中间件。尝试重新排序 kernel.php 中的中间件,或者可能有其他一些包可能导致问题,因为根据上面的链接,Spatie Google Tag Manager 导致 session 出现问题。也许某个类的配置被覆盖容器?

因此,如果您可以提供 composer.json,我们或许能够找出导致问题的包。可能是其他一些可能导致会话出现问题的包。

还可以尝试将 config/app.php 中的 toastr 服务提供程序重新排序到最后一个位置

如果没有这些作品,请尝试使用:https://codeseven.github.io/toastr/

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多