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

kqqjbcuj  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(64)

我需要准备一组日期,并在用户重新加载页面时将其存储在Session变量中。这是从Controller完成的。这是一个问题,因为应用程序在每次加载时调用大约18个不同的控制器,所以我需要更改这些日期的存储方式。
我曾经想过使用一个中间件,但这意味着我需要为每个方法设置一个中间件,否则每次调用都会加载18次。我也尝试过设置一分钟的速率限制,但我必须改变这种方式的原因是因为连续调用时日期会混淆,这种想法防止了这种情况发生超过一分钟一次。
所以我想知道是否有一种方法可以在每次视图加载时只调用一次方法。

fquxozlt

fquxozlt1#

1.创建一个新的服务提供商:

php artisan make:provider DateServiceProvider

字符串
1.打开PHP/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');

6ojccjat

6ojccjat2#

在Laravel中,通过使用Laravel的模板引擎Blade提供的@once指令,你可以在每次视图加载时只执行一次方法。该指令确保其中的代码在每次视图渲染时只执行一次。下面是如何使用它:

@once
    <?php
        // Call your method here
        myMethod();
    ?>
@endonce

字符串
如果我没理解错的话,这就是你想要的。

相关问题