跟我學(xué)Laravel之視圖 & Response
基本Response
從路由中返回字符串
Route::get('/', function()
{
return 'Hello World';
});
創(chuàng)建自定義Response
Response類繼承自Symfony\Component\HttpFoundation\Response類,提供了多種方法用于構(gòu)建HTTP Response。
$response = Response::make($contents, $statusCode);
$response->header('Content-Type', $value);
return $response;
如果需要訪問(wèn) Response 類的方法,但又要返回一個(gè)視圖作為響應(yīng)的內(nèi)容,通過(guò)使用 Response::view 方法可以很容易實(shí)現(xiàn):
return Response::view('hello')->header('Content-Type', $type);
在Response中添加Cookie
$cookie = Cookie::make('name', 'value');
return Response::make($content)->withCookie($cookie);
重定向
返回一個(gè)重定向
return Redirect::to('user/login');
返回一個(gè)帶有數(shù)據(jù)的重定向
return Redirect::to('user/login')->with('message', 'Login Failed');
注意: with 方法將數(shù)據(jù)寫到了Session中,通過(guò)Session::get 方法即可獲取該數(shù)據(jù)。
返回一個(gè)重定向至命名路由
return Redirect::route('login');
返回一個(gè)重定向至帶有參數(shù)的命名路由
return Redirect::route('profile', array(1));
返回一個(gè)重定向至帶有命名參數(shù)的命名路由
return Redirect::route('profile', array('user' => 1));
返回一個(gè)重定向至控制器Action
return Redirect::action('HomeController@index');
返回一個(gè)重定向至控制器Action并帶有參數(shù)
return Redirect::action('UserController@profile', array(1));
返回一個(gè)重定向至控制器Action并帶有命名參數(shù)
return Redirect::action('UserController@profile', array('user' => 1));
視圖
視圖通常包含應(yīng)用中的HTML代碼,為分離表現(xiàn)層與控制器和業(yè)務(wù)邏輯提供了便利。視圖存放于app/views目錄。
一個(gè)簡(jiǎn)單視圖案例:
<!-- View stored in app/views/greeting.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
通過(guò)如下方法來(lái)返回該視圖到瀏覽器:
Route::get('/', function()
{
return View::make('greeting', array('name' => 'Taylor'));
});
傳遞給View::make方法的第二個(gè)參數(shù)是一個(gè)數(shù)組,它將被傳遞給視圖。
傳遞數(shù)據(jù)給視圖
// Using conventional approach
$view = View::make('greeting')->with('name', 'Steve');
// Using Magic Methods
$view = View::make('greeting')->withName('steve');
在上面的案例中,$name變量在視圖內(nèi)是可以訪問(wèn)的,其值為Steve。
你還可以在所有視圖同共享同一數(shù)據(jù):
View::share('name', 'Steve');
向視圖傳遞子視圖
或許你可能想將一個(gè)視圖放入到另一個(gè)視圖中。例如,將存放在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>
視圖合成器
視圖合成器可以是回調(diào)函數(shù)或者類方法,它們?cè)趧?chuàng)建視圖時(shí)被調(diào)用。如果你想在應(yīng)用程序中,每次創(chuàng)建視圖時(shí)都為其綁定一些數(shù)據(jù),使用視圖合成器可以將代碼組織到一個(gè)地方。因此,視圖合成器就好像是 “視圖模型”或者是“主持人”。
定義一個(gè)視圖合成器
View::composer('profile', function($view)
{
$view->with('count', User::count());
});
現(xiàn)在,每次創(chuàng)建profile視圖時(shí),count都會(huì)被綁定到視圖中。
你也可以為多個(gè)視圖同時(shí)綁定一個(gè)視圖合成器:
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());
}
}
注意,沒(méi)有規(guī)定視圖合成器類存放在哪里。因此,你可以任意存放,只要能在composer.json文件中指定位置并自動(dòng)加載即可。
視圖創(chuàng)建器
視圖 創(chuàng)建器 與視圖合成器的工作方式幾乎完全相同;區(qū)別在于當(dāng)一個(gè)視圖被實(shí)例化后就會(huì)立即觸發(fā)視圖創(chuàng)建器。視圖創(chuàng)建器通過(guò) creator 方法方便地定義:
View::creator('profile', function($view)
{
$view->with('count', User::count());
});
特殊Response
創(chuàng)建一個(gè)JSON Response
return Response::json(array('name' => 'Steve', 'state' => 'CA'));
創(chuàng)建一個(gè)JSONP Response
return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));
創(chuàng)建一個(gè)文件下載Response
return Response::download($pathToFile);
return Response::download($pathToFile, $status, $headers);
注意: Symfony HttpFoundation 用于處理文件下載,要求下載的文件的文件名只包含 ASCII 字符。
Response 宏
如果希望自定義一個(gè) response ,以便在你應(yīng)用程序中的許多路由和控制器中進(jìn)行重用,可以使用 Response::macro 方法:
Response::macro('caps', function($value)
{
return Response::make(strtoupper($value));
});
macro 方法接受兩個(gè)參數(shù),一個(gè)指定和名稱和一個(gè)閉包。當(dāng)通過(guò) Response 類調(diào)用該名稱的宏時(shí),閉包就會(huì)被執(zhí)行:
return Response::caps('foo');
你可以在 app/start 目錄里的文件中定義宏?;蛘?,你也可以通過(guò)一個(gè)單獨(dú)的文件組織你的宏,并將該文件包含至某個(gè) start 文件中。
- laravel框架模型、視圖與控制器簡(jiǎn)單操作示例
- Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程
- Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡(jiǎn)介
- laravel通過(guò)a標(biāo)簽從視圖向控制器實(shí)現(xiàn)傳值
- Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)
- Laravel 5框架學(xué)習(xí)之子視圖和表單復(fù)用
- Laravel5.4框架中視圖共享數(shù)據(jù)的方法詳解
- Laravel框架學(xué)習(xí)筆記(二)項(xiàng)目實(shí)戰(zhàn)之模型(Models)
- Laravel模型事件的實(shí)現(xiàn)原理詳解
- Laravel框架控制器,視圖及模型操作圖文詳解
相關(guān)文章
如何用phpmyadmin設(shè)置mysql數(shù)據(jù)庫(kù)用戶的權(quán)限
發(fā)現(xiàn)有很多用戶對(duì)數(shù)據(jù)庫(kù)用戶權(quán)限的設(shè)置不太了解,下面為大家詳細(xì)講解一下如何用 phpMyAdmin 來(lái)設(shè)置數(shù)據(jù)庫(kù)用戶的權(quán)限2012-01-01PHP 二維關(guān)聯(lián)數(shù)組根據(jù)其中一個(gè)字段排序(推薦)
這篇文章主要介紹了PHP 二維關(guān)聯(lián)數(shù)組根據(jù)其中一個(gè)字段排序的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04