回到最上方

文件

視圖及回應
(Views & Responses)

基本回應

從路由取得字串

Route::get('/', function()
{
    return 'Hello World';
});

建立自訂回應

Response 的實例是繼承 Symfony\Component\HttpFoundation\Response 類別,提供各種不同的方法去建立一個 HTTP 的回應。

$response = Response::make($contents, $statusCode);

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

return $response;

添加 cookies 資料到回應中

$cookie = Cookie::make('name', 'value');

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

重導

回傳重新導向到指定連結

return Redirect::to('user/login');

回傳重新導向到指定名稱的路由

return Redirect::route('login');

回傳重新導向到指定名稱的路由,並添加參數資料

return Redirect::route('profile', array(1));

回傳重新導向到指定名稱的路由,並添加有命名的參數資料

return Redirect::route('profile', array('user' => 1));

回傳重新導向到指定控制器的動作中

return Redirect::action('HomeController@index');

回傳重新導向到指定控制器的動作中,並添加參數資料

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

回傳重新導向到指定控制器的動作中,並添加有命名的參數資料

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

視圖

視圖 (View) 基本上都會包含 HTML ,提供你的網頁程式能夠方便的將控制器 (Controller) 抽離開前端呈現的邏輯之外,視圖的檔案是存放在 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 的第二個參數是一個陣列資料,這些陣列可以在視圖中被存取到:

傳送資料到視圖

$view = View::make('greeting', $data);

$view = View::make('greeting')->with('name', '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>

視圖Composers

視圖 Composer 是一個回呼 (callback) 或類別的方法,當視圖被建立時會呼叫這個方法,如果你有資料想要每次都綁定到視圖上,視圖 Composer 可以將這些資料整合在相同地方,因此視圖 Composer 會像是"視圖的模型 (view models)"或是"呈現器 (presenters)"。

定義一個視圖 Composer

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});

現在每次 profile 視圖被建立時,count 資料將會都被綁訂到此視圖。

你也可以一次就將視圖 Composer 綁訂到多個視圖當中:

View::composer(array('profile','dashboard'), function($view)
{
    $view->with('count', User::count());
});

假如你想用類別為基礎的 Composer,透過 IoC容器 的應用可以提供你解決更多這樣的問題,你可以這樣做:

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

一個視圖的 Composer 類別應該被定義成像這樣:

class ProfileComposer {

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

}

請注意到,這裡並沒有任何的規矩去限制 Composer 類別要存在什麼樣的地方,你可以將她存放在任何的地方,只要他們可以使用 composer.json 的檔案做紀錄,去直接自動的載入這個類別:

特殊回應

建立一個 JSON 資料格式的回應

return Response::json(array('name' => 'Steve', 'state' => 'CA'));

建立一個 JSONP 資料格式的回應

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));

建立一個下載檔案的回應

return Response::download($pathToFile);

return Response::download($pathToFile, $name, $headers);

討論