2016-04-29 60 views
2

我是新手,我正在學習laravel 5.2,我有我與laravel做一個博客,我有所謂的「設置」,在這裏,數據庫中的表是它的遷移文件:如何在Laravel 5.2中從數據庫中獲取特定數據的自定義配置文件?

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文件夾上創建一個自定義配置文件。 所以我做了一個名爲「定製」的文件,我試圖訪問數據庫來獲取從設置表中的數據和這裏的自定義配置:

<?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 

有什麼想法如何解決它?或者至少你知道另一個解決方案來將我的網站設置數據傳遞給所有控制器,方法和視圖嗎?

謝謝你的時間。

回答

0

也許添加連接門面將解決這個問題 -

<?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, 
); 

看來你的模型不能連接到數據庫,這是你的主要問題。

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'); 
+0

裏面'MyConfig'我想讀這些值。 ) –

+0

對不起,但我沒有看到任何好的教程。人們說Laracasts有一些很好的相關課程,但它們不是免費的。您可以從瞭解服務提供商開始。 https://laravel.com/docs/master/providers和MyConfig只是一個簡單邏輯的自定義類。 –

+0

謝謝我在這個鏈接上找到答案[鏈接](http://stackoverflow.com/questions/28608527/how-to-pass-data-to-all-views-in-laravel-5) –

0

我建議當你使用配置使用的數據庫。 我通常所做的就是在config文件夾內創建一個配置文件(就像你在做什麼一樣)並在那個配置文件中硬編碼這些值。

P.S如果你的設定值有特定的環境,然後把這些值在ENV文件,並在您的配置文件

+0

這是一個不好的答案,這就是爲什麼。有很多情況下,您希望允許最終用戶通過UI更改應用程序中的設置。將值硬編碼到環境文件中是不切實際的,可維護的或方便的。 – kjdion84

+1

「在很多情況下,您想允許最終用戶通過UI更改應用程序中的設置」 - 在這種情況下,請勿使用配置。 – Abhishek

相關問題