如何在Laravel中设置全局变量(不与迁移相混淆)?

时间:2017-04-04 08:09:12

标签: php laravel laravel-5 eloquent laravel-5.4

我只想从我的数据库的options表中获取网站的标题和标语 我尝试从AppServiceProvider.php获取它,但是当我删除所有表格并运行PHP artisan migrate时,它显示表格不存在的错误。

我也尝试过Session但最后,我需要使用旧的AppServiceProvider.php方法。它运行正常但不是我们安装应用程序新的并运行迁移!

这就是我的AppServiceProvider.php看起来想知道我想要做什么。

public function boot()
{
    $site_options = array();

    $site_title = Options::where('option_name','site_title')->first();
    $site_options['site_title'] = $site_title?$site_title->option_value:'Site Title';

    $site_tagline = Options::where('option_name','site_tagline')->first();
    $site_options['site_tagline'] = $site_tagline?$site_tagline->option_value:'A Simple website!';

    view()->share('site_options',$site_options);
}

我在Stackoverflow上搜索答案,但我不知道该怎么做。我也可以在所有控制器上创建构造函数并获取数据,但是我必须在每个视图中传递变量,这使得代码看起来很糟糕!

为此提供任何标准解决方案?

PS:播种当我将此代码添加到AppServiceProvider.php或迁移工作中时不起作用。我必须从AppServiceProvider.php删除此代码才能迁移和播种!

1 个答案:

答案 0 :(得分:1)

你可以使用try catch吗?

try {
    $site_title = Options::where('option_name','site_title')->first();
    $site_options['site_title'] = $site_title->option_value;
} catch (\Exception $e) {
    $site_options['site_title'] = 'Site Title';
}