2017-04-04 42 views
0

我只想從我的數據庫的options表中獲取網站的標題和標語。
我試着從AppServiceProvider.php中取出它,但是它顯示當我刪除所有表並運行PHP artisan migrate時表不存在的錯誤。

我也嘗試過會話但最後,它帶我到舊的AppServiceProvider.php方法。它工作正常,但不是當我們安裝應用程序的新鮮和運行遷移!

這就是我的AppServiceProvider.php看起來像是想得到我想要做什麼。如何在Laravel中設置全局變量(無需考慮遷移)?

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中刪除此代碼才能遷移並種子!

+0

您必須遷移表和種子數據 –

+0

是但含有'當我從'AppServiceProvider.php'獲取數據的php artisan'不起作用的任何命令。 –

回答

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

Wooooooo!我怎麼可以這麼愚蠢到不使用Try Catch block!謝啦! –

+0

不是最優雅的 - 你可以尋找特定的異常類它拋出和捕捉,以防萬一有一個不同的問題,這使得它很難調試。 –

+0

@AdarshSojitra p.s.如果這解決了您的問題,請隨時將答案標記爲正確 –