laravel3學習筆記(四)

來源:互聯網
上載者:User

標籤:http   使用   os   檔案   資料   io   

原作者部落格:ieqi.net

====================================================================================================

視圖

Laravel3遵循MVC模式,視圖層負責將控制器處理好的資料展示出來,view層相關代碼檔案儲存在application/views目錄下,並且以php結尾。

因為PHP本身就可以和HTML混寫的特性,一般而言,PHP架構的View層某種程度上也可以作為模板使用。

 

比如我們建立一個檔案 application/views/home/index.php :

    Hello World!

這樣,我們就可以在處理請求返回時調用view渲染:

// 路由回調方法Route::get(‘/‘, function(){    return View::make(‘home.index‘);});// controller 中的方法public function action_index(){    return View::make(‘home.index‘);});

注意上面make()方法中的參數,使用.作為層級劃分,沒有php尾碼,與views檔案夾下的檔案對應一目瞭然。

我們可以通過下述方法,探測view是否存在:

$exists = View::exists(‘home.index‘);

有時,我們需要設定特殊的http狀態代碼,或者是http頭資訊,我們可以這樣在返回時處理:

$headers = array(‘foo‘ => ‘bar‘);return Response::make(‘Hello World!‘, 200, $headers);

注意,上述的make方法不是View類中的make,而是Response中的make方法。

返回view並綁定資料:

return Response::view(‘home‘, array(‘foo‘ => ‘bar‘));

返回json格式資料:

return Response::json(array(‘name‘ => ‘Batman‘));

直接利用orm返回json資料,前提當然是你有使用orm:

return Response::eloquent(User::find(1));
綁定資料渲染view

Laravel3提供多種方式在渲染View時綁定資料,為開發人員提供最大的便利(文法糖猛了一點)。

With綁定

return View::make(‘home‘)->with(‘name‘, ‘James‘);

然後就可以在名為home的view中使用變數$name了,變數值為 ‘James’

with綁定可以鏈式使用:

View::make(‘home‘)    ->with(‘name‘, ‘James‘)    ->with(‘votes‘, 25);

綁定數組:

View::make(‘home‘, array(‘name‘ => ‘James‘));

可以將綁定屬性當做view類的屬性處理:

$view->name  = ‘James‘;$view->email = ‘[email protected]‘;

還可以用類數組的方式操作:

$view[‘name‘]  = ‘James‘;$view[‘email‘] = ‘[email protected]‘;

這麼多種的資料繫結方式,總有一款適合你。

給view命名

給命名view有什麼意義呢?和命名路由一樣,增加一層命名抽象,我們就可以減少在變更view本身檔案名稱等改動時其他部分的改動成本。

首先註冊view的命名,需要寫到 routes.php 中:

View::name(‘layouts.default‘, ‘layout‘);

調用時,這樣使用;

return View::of(‘layout‘);

綁定資料:

return View::of(‘layout‘, array(‘orders‘ => $orders));

當然,也可以使用with綁定資料。

return View::of(‘layout‘)->with(‘name‘, ‘Will‘);
view合成器

一般網頁上有很多相對固定的塊區,展示相對固定的東西,比如導覽列,比如最新文章之類。如果我們每次渲染view都將這些資料繫結到前端,不僅使得代碼臃腫而且不利於維護。

題外話:
這個問題其實可以看做考察一個web架構的標杆,web架構能為我們開發web提供什麼樣的便利?漂亮的檔案組織?orm?MVC?模板系統?這些都很重要,但是說實話現在大多架構這些方面做的都很好,可以說除了結構、編碼風格以外沒什麼差別了。而對塊區的處理則最能展現各個架構的特點。在yii中,我們有Widget,在flask中我們有blueprint和content。

在Laravel3中我們可以通過,view合成器來解決這個問題,view合成器需要在routes.php檔案中編寫;

View::composer(‘home‘, function($view){    $view->nest(‘footer‘, ‘partials.footer‘);});

通過上述代碼,我們給home這個view嵌入了partials.footer這個子view。

我們還可以一次合成多個view

// 合成器處理home和profile這兩個viewView::composer(array(‘home‘, ‘profile‘), function($view){    //});

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.