程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 跟我學Laravel之視圖 & Response

跟我學Laravel之視圖 & Response

編輯:PHP綜合

基本Response

從路由中返回字符串

復制代碼 代碼如下:
Route::get('/', function()
{
    return 'Hello World';
});

創建自定義Response

Response類繼承自Symfony\Component\HttpFoundation\Response類,提供了多種方法用於構建HTTP Response。

復制代碼 代碼如下:
$response = Response::make($contents, $statusCode);

$response->header('Content-Type', $value);

return $response;

如果需要訪問 Response 類的方法,但又要返回一個視圖作為響應的內容,通過使用 Response::view 方法可以很容易實現:

復制代碼 代碼如下:
return Response::view('hello')->header('Content-Type', $type);

在Response中添加Cookie

復制代碼 代碼如下:
$cookie = Cookie::make('name', 'value');

return Response::make($content)->withCookie($cookie);

重定向

返回一個重定向

return Redirect::to('user/login');
返回一個帶有數據的重定向

return Redirect::to('user/login')->with('message', 'Login Failed');
注意: with 方法將數據寫到了Session中,通過Session::get 方法即可獲取該數據。
返回一個重定向至命名路由

return Redirect::route('login');
返回一個重定向至帶有參數的命名路由

return Redirect::route('profile', array(1));
返回一個重定向至帶有命名參數的命名路由

return Redirect::route('profile', array('user' => 1));
返回一個重定向至控制器Action

return Redirect::action('HomeController@index');
返回一個重定向至控制器Action並帶有參數

return Redirect::action('UserController@profile', array(1));
返回一個重定向至控制器Action並帶有命名參數

return Redirect::action('UserController@profile', array('user' => 1));

視圖

視圖通常包含應用中的HTML代碼,為分離表現層與控制器和業務邏輯提供了便利。視圖存放於app/views目錄。

一個簡單視圖案例:

復制代碼 代碼如下:
<!-- View stored in app/views/greeting.php -->

<html>
    <body>
        <h1>Hello, <?php echo $name; ?></h1>
    </body>
</html>

通過如下方法來返回該視圖到浏覽器:

復制代碼 代碼如下:
Route::get('/', function()
{
    return View::make('greeting', array('name' => 'Taylor'));
});

傳遞給View::make方法的第二個參數是一個數組,它將被傳遞給視圖。

傳遞數據給視圖

復制代碼 代碼如下:
// Using conventional approach
$view = View::make('greeting')->with('name', 'Steve');

// Using Magic Methods
$view = View::make('greeting')->withName('steve');

在上面的案例中,$name變量在視圖內是可以訪問的,其值為Steve。

你還可以在所有視圖同共享同一數據:

View::share('name', 'Steve');

向視圖傳遞子視圖

或許你可能想將一個視圖放入到另一個視圖中。例如,將存放在app/views/child/view.php文件中的子視圖傳遞給另一視圖,如下:

復制代碼 代碼如下:
$view = View::make('greeting')->nest('child', 'child.view');

$view = View::make('greeting')->nest('child', 'child.view', $data);

在父視圖就可以輸出該子視圖了:

復制代碼 代碼如下:
<html>
    <body>
        <h1>Hello!</h1>
        <?php echo $child; ?>
    </body>
</html>

視圖合成器

視圖合成器可以是回調函數或者類方法,它們在創建視圖時被調用。如果你想在應用程序中,每次創建視圖時都為其綁定一些數據,使用視圖合成器可以將代碼組織到一個地方。因此,視圖合成器就好像是 “視圖模型”或者是“主持人”。

定義一個視圖合成器

復制代碼 代碼如下:
View::composer('profile', function($view)
{
    $view->with('count', User::count());
});

現在,每次創建profile視圖時,count都會被綁定到視圖中。

你也可以為多個視圖同時綁定一個視圖合成器:

復制代碼 代碼如下:
View::composer(array('profile','dashboard'), function($view)
{
    $view->with('count', User::count());
});

如果你更喜歡使用基於類的視圖合成器,IoC container可以提供更多便利,如下所示:

View::composer('profile', 'ProfileComposer');

視圖合成器類定義如下:

復制代碼 代碼如下:
class ProfileComposer {

    public function compose($view)
    {
        $view->with('count', User::count());
    }

}

注意,沒有規定視圖合成器類存放在哪裡。因此,你可以任意存放,只要能在composer.json文件中指定位置並自動加載即可。

視圖創建器

視圖 創建器 與視圖合成器的工作方式幾乎完全相同;區別在於當一個視圖被實例化後就會立即觸發視圖創建器。視圖創建器通過 creator 方法方便地定義:

復制代碼 代碼如下:
View::creator('profile', function($view)
{
    $view->with('count', User::count());
});

特殊Response

創建一個JSON Response

return Response::json(array('name' => 'Steve', 'state' => 'CA'));
創建一個JSONP Response

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
創建一個文件下載Response

return Response::download($pathToFile);

return Response::download($pathToFile, $status, $headers);
注意: Symfony HttpFoundation 用於處理文件下載,要求下載的文件的文件名只包含 ASCII 字符。

Response 宏

如果希望自定義一個 response ,以便在你應用程序中的許多路由和控制器中進行重用,可以使用 Response::macro 方法:

復制代碼 代碼如下:
Response::macro('caps', function($value)
{
    return Response::make(strtoupper($value));
});

macro 方法接受兩個參數,一個指定和名稱和一個閉包。當通過 Response 類調用該名稱的宏時,閉包就會被執行:

return Response::caps('foo');
你可以在 app/start 目錄裡的文件中定義宏。或者,你也可以通過一個單獨的文件組織你的宏,並將該文件包含至某個 start 文件中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved