如何在Laravel 5.2中创建从数据库中获取特定数据的自定义配置文件?

时间:2016-04-29 01:58:12

标签: php mysql laravel laravel-5.2

我是新手,我正在学习laravel 5.2,我有一个博客,我正在使用laravel,我在数据库中有一个名为“settings”的表,这是它的迁移文件:

public function up()
{
    Schema::create('settings', function (Blueprint $table) {
        $table->increments('id');
        $table->string('site_name');
        $table->text('site_description');
        $table->string('about_head');
        $table->text('about_description');
        $table->text('about_body');
        $table->timestamps();
    });
}

我在此表中输入数据,现在我想将这些数据传递给所有控制器和所有方法。 我发现最好的方法是在App \ Config文件夹上创建自定义配置文件。 所以我创建了一个名为“custom”的文件,我试图访问数据库以从设置表中获取数据,这是自定义配置:

<?php
use Illuminate\Support\Facades\Config;
use App\Setting;

$setting = Setting::find(1);
return array(
  'site_name' => $setting->site_name,
  'site_description' => $setting->site_description,
  'about_head' => $setting->about_head,
  'about_description' => $setting->about_description,
  'about_body' => $setting->about_body,
);

但是我的laravel根目录

出现了错误
Fatal error: Call to a member function connection() on null in C:\xampp\htdocs\myblog\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php on line 3280

知道如何修复它吗?或者至少你知道另一种将我的网站设置数据传递给所有控制器,方法和视图的解决方案吗?

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

可能添加连接 Facade将解决此问题 -

<?php
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\Config;
use App\Setting;

$setting = Setting::find(1);
return array(
  'site_name' => $setting->site_name,
  'site_description' => $setting->site_description,
  'about_head' => $setting->about_head,
  'about_description' => $setting->about_description,
  'about_body' => $setting->about_body,
);
  

您的模型似乎无法连接到数据库,这是您的主要问题。

答案 1 :(得分:0)

我不认为配置文件中的查询会起作用。您可以做的是create a service provideruse singleton。创建服务提供商:

php artisan make:provider MyConfigServiceProvider

绑定单身人士:

$this->app->singleton('myconfig', function ($app) {
    return new MyConfig();
});

使用它:

$siteName = App::make('myconfig')->getConfig('site_name');

答案 2 :(得分:0)

我建议在您使用配置时使用数据库。 我通常做的是在config文件夹中创建一个配置文件(就像你正在做的那样)并在配置文件中硬编码这些值。

P.S如果您的设置值是特定于环境的,那么将这些值放在env文件中并在配置文件中读取这些值