如何在 laravel 上的每个页面加载时执行代码

问题描述 投票:0回答:1

当用户重新加载页面时,我需要准备一组日期并将它们存储在会话变量中。这是由控制器完成的。这是一个问题,因为应用程序在每次加载时调用大约 18 个不同的控制器,因此我需要更改这些日期的存储方式。

我考虑过使用中间件,但这意味着为我加载视图的每个方法设置此中间件,否则每次调用仍会加载此日期 18 次。 另外,我尝试设置一分钟的速率限制器,但我必须更改完成方式的原因是因为连续调用的日期会混淆,而这个想法可以防止这种情况每分钟发生一次以上。

所以我想知道是否有一种方法可以在每次视图加载时调用一次方法或类似的方法。

laravel controller middleware
1个回答
0
投票
  1. 创建新的服务提供商:
php artisan make:provider DateServiceProvider
  1. 打开config/app.php并将您的服务提供商添加到providers数组中:
'providers' => [
    // ...
    App\Providers\DateServiceProvider::class,
],
  1. 在新创建的 DateServiceProvider 中,使用 boot 方法设置您的日期:
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Session;

class DateServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        if (!Session::has('dates')) {
            // Calculate your dates here...
            $dates = '...';

            // Store the dates in session
            Session::put('dates', $dates);
        }
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

现在,您可以通过会话从任何控制器、中间件或视图访问这些日期:

$dates = session('dates');
© www.soinside.com 2019 - 2024. All rights reserved.