在每个视图文件中传递变量-laravel

在每个视图文件中传递变量-laravel,laravel,controller,Laravel,Controller,我想在包含数据库数据的每个视图中发送一些变量。我在基本控制器中编写了以下代码,因为它由所有控制器扩展: public function __construct() { $opening_hours = OpeningHours::first(); $social_media = SocialMedia::first(); $website = Website::first(); view()->share('opening_hours', $opening

我想在包含数据库数据的每个视图中发送一些变量。我在基本控制器中编写了以下代码,因为它由所有控制器扩展:

public function __construct()
{
    $opening_hours = OpeningHours::first();
    $social_media = SocialMedia::first();
    $website = Website::first();

    view()->share('opening_hours', $opening_hours)
        ->share('social_media', $social_media)
        ->share('website', $website);
}

我还调用了
parent::u construct()在我的所有控制器中。但是,当我尝试调试它时,我仍然在视图文件中得到未定义的变量
$opening\u hours
。如何发送必须包含在每个视图文件中的网站数据(网站徽标、联系人、电子邮件)?

Laravel为我们提供了一些类似的功能。您可以尝试使用视图生成器。如果我们想在每个屏幕上显示一些数据,这些功能非常有用。但我们希望将其放在单独的位置,而不是在每个控制器中编写代码

https://laravel.com/docs/master/views#view-composers

这将对我们有所帮助。

您是一个名为
AppServiceProvider.php
的文件,位于
app/Providers
文件夹中,您可以在其中执行以下操作:

<?php

namespace App\Providers;

use View;
use App\OpeningHours;
use App\SocialMedia;
use App\Website;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    public function boot()
    {
        $contact_details = [
            'opening_hours' => OpeningHours::first(),
            'social_media' = SocialMedia::first(),
            'website' => Website::first(),
        ];

        View::share('contact_details', $contact_details);
    }
}

你可以用这种方法试试
创建一个one中间件,将此代码添加到中间件中,并在需要此数据的位置使用middle,数据将在该视图中可用

$opening_hours = OpeningHours::first();
$social_media = SocialMedia::first();
$website = Website::first();

view()->share('opening_hours', $opening_hours)
    ->share('social_media', $social_media)
    ->share('website', $website);

view()->share(…)
返回第二个参数,而不是视图工厂本身。它说Class
“App\Providers\OpeningHours”
不是found@Alisha这是因为您需要在文件顶部使用它,或者使用PSR4名称空间。e、 g.
使用App\OpeningHours
使用视图下