2017-06-14 149 views
0

我想爲我的UserController重複使用相同的return View::make('pages.home');模板視圖,但我不確定如何將視圖連接到該控制器。如何通過控制器呈現視圖模板

我假設我需要在我的控制器的index中加入一些東西,但我不確定這是我第一次和Laravel做什麼。

這裏是我當前的代碼:

Routes.php

<?php 

Route::get('/home', function() { 
    return View::make('pages.home'); 
}); 

Route::get('/', '[email protected]'); 
Route::get('user/{id}', '[email protected]'); 

Route::get('/foo', function() { 
    return 'taobao'; 
}); 

UserController.php //simplified

public function index() 
{ 
    $this->oauth(); 
    return view('user', ['name' => 'James']); 
} 
+1

不要在這裏找到任何錯誤,你面對的? – Exprator

回答

1

如果您需要重用在UserController中相同return View::make('pages.home');或主頁視圖,你可以把它作爲

return view('home', ['name' => 'James']); 

,或者您需要在用戶家視圖中查看,那麼你可以做

@extends('home') or @include('home') 
+0

我完全超越了這個,真的只好把它改回家 – NooBskie

1

你可以試試這個

public function index() 
{ 
    $this->oauth(); 
    $user = ['name' => 'James']; 
    return view('user', compact('user')); 
} 

現在你可以在用戶視圖中調用$user。 示例(使用刀片):{{ $user['name'] }},輸出將爲James

1

您並不完全需要將您的視圖連接到Laravel中的控制器。你只需要把你的視圖放到特定的位置(默認或預期)。

將視圖存儲在視圖目錄中後,您可以在任何控制器內調用它。 MVC中的視圖和控制器之間沒有嚴格的連接。

您只需要從任何您想要的控制器操作中返回return View::make('pages.home');並重復使用它多次。或者,你可以使用幫手,而不是return view('pages.home');

希望這就是你所尋求的。

1

您不需要將任何特定於您的Controller的方法index()。把控制器想象成可以控制將要發生的事情的一個控制器,或者是對數據庫的長查詢,計算某些操作,返回一個視圖,或者是所有組合。

在上面的代碼中,Route::get('/', '[email protected]');實際上是將/「地址」或路由綁定到您的UserController的方法index()

至於你問什麼,你需要拆分你的pages.home視圖,以便它可以重複使用。我建議你閱讀templates文檔。

總之,你可以有以下的頁面,叫base.blade.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Page</title> 

    <!-- Bootstrap includes --> 
    <!-- JS Includes --> 
</head> 
<body> 
    <nav> 
     <ul> 
      <li><a href="#">Link 1</a></li> 
      <li><a href="#">Link 2</a></li> 
     </ul> 
    </nav> 

    <div class="content"> 
     @yield('content') 
    </div> 
</body> 
</html> 

然後,我們可以創建2個頁面。

users.blade.php

@extends('layouts.base') 

@section('content') 

    <div> Hello Users!</div>  

@endsection 

admins.blade.php

@extends('layouts.base') 

@section('content') 

    <div> Hello Admins!</div>  

@endsection 

這兩個刀片模板將注入HTML他們通訊員段裏,在這種情況下的內容,在模板base.blade.php時,他們被稱爲。這樣,您可以「重用」一個視圖,這是非常有效的,因爲更改base.blade.php將更改所有「注入」或從中繼承的視圖。

現在,就像您所說的,爲了將視圖「連接」到控制器,您只需要從該控制器中的方法內返回視圖。例如:

MyController.php

MyController extends Controller{ 

    ... 

    public function index() 
    { 
     // Fancy stuff you might wanna do... 

     // Note this will pull the view from within the layout folder 
     return view('users'); 
    } 

} 

當然,你需要有一個與該控制器和方法,在這種情況下,你做配對的路線。

我希望這有助於!

乾杯!

1

我想你應該試試這個:

在你的user.blade.php

@include('pages.home') 
相關問題