在每个视图文件中传递变量-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代码>在使用视图下代码>