2017-05-26 81 views
1

我還沒有能夠使用路由器以外的控制器。Laravel 5.4 - 在路徑以外使用控制器

我希望能夠訪問我的用戶表中的一行中的一列。我想獲取用戶ID並將其分配給一個變量。但我不想使用路由,因爲這不是用於頁面;這是我的主佈局文件。

我有一個名爲「admin」的列。如果這等於1,我想在我的菜單欄中使用@if來顯示管理控制面板的鏈接。但要獲得管理員列,我需要能夠訪問用戶表。

我試着通過使用jQuery用戶ID分配給頁面加載一個變量這樣做:

$(window).load(function(){ 

    get('[email protected]'); 

    $userID = {{ $user->id }}; 
    console.log($userID); 

}) 

我也試過

$(window).load(function(){ 

    Route::get('[email protected]'); 

    $userID = {{ $user->id }}; 
    console.log($userID); 

}) 

從本質上講,我不知道如何訪問模式或無路由控制器,例如:

Route::get('/home', '[email protected]')->name('home'); 

的Laravel的錯誤,我得到的是

Undefined variable: user 

我知道我沒有訪問管理員列,我知道如何做到這一點,我可以訪問用戶表。

回答

2

該視圖不直接訪問控制器。換句話說,該視圖用於控制器生成html到f2e(客戶端瀏覽器),因此視圖必須從控制器獲取變量(請參見下圖)。 enter image description here

'使用路由器外部的控制器',它用於控制器助手類似的服務。例如,如果控制器很大,它可以分爲小功能和服務。或者,多個控制器使用相同的通用工具,它也可以分爲服務。小功能或相同的常用工具只能由控制器在沒有路由的情況下調用。

您應該從使用主佈局文件的每個控制器的模型訪問管理員。例如,如果家庭和用戶視圖包含主佈局文件,那麼這兩個視圖必須從它控制器獲得admin變量...

  • 路線::得到(「/家」,「的HomeController @指數」) ;
  • Route :: get('/ user','HomeController @ user');

控制器:

class HomeController extends Controller { 
    public function index(){ 
      return view('home', ['admin' =>User::findOrFail($current_user.id).admin]); 
    } 
    public function user(){ 
      return view('user', ['admin' => User::findOrFail($current_user.id).admin]); 
    } 
} 
+0

感謝的是,據我所知,好一點了,但我仍然不知道如何去實現我想要 –

+0

你應該從模型訪問管理員爲每個什麼使用主版面文件的控制器。例如,如果/ home路由使用HomeController @ index,並且索引返回一些視圖。您應該訪問HomeController @ index中的管理員並將其傳遞到視圖。 – WeiYuan

+0

感謝您的代碼,每次編輯後我都會了解更多! 如何將控制器代碼轉換爲*我擁有的每個*視圖?我不想爲每個視圖添加「HomeController @ index」。我的主側欄位於每一頁上,就像一個標題。 –