laravel

Laravel入門 Lesson 3 - View & Model

More than 3 years have passed since last update.

View & Controller

Intro

Applicationを開発するときに「MVC pattern」というDesign patternがある。
MVC patternはApplicationを「Model」、「View」、「Controller」に分けて設計するやり方である。

簡単に各部分を説明すると、
- Model : Applicationのデータをいじる部分
- View : Applicationの外観をいじる部分
- Controller : ModelとViewを操作する。

つまり、ControllerがModelからデータをとってViewを通じて結果を表すようになる。

それで、今回はViewとControllerをいじってみる。

ModelであるApplicationのデータはDatabase serverを使うつもりなので、次のレスンで説明する。

Step 1. Viewを作る

Viewはapp/viewsDirectoryに入れて、書き方は普通のPHP pageと同じであるので、
すごく簡単である。

まず、app/viewsdirectoryにmyFirstView.phpを作る。

app/views/myFirstview.php

<h1>Hello, there!</h1>
<p>This is my first view</p>

Step 2. RouteでViewを呼んでみる

今回は先作ったViewをRouteを通じて呼んでみる。

たぶん、Routeに最初から入っているコードを見たらすでにやり方がわかると思う。

app/routes.php

Route::get('myview', function()
{
    return View::make('myFirstView');
});

確認は
http://localhost/mylaravel/public/myview
でする。

結果
lesson3-1.png

Step 3. Viewにデータを送る

ViewはApplicationが提供しようとするデータをどんな形に見せるのかを決める役割をする。
しかし、今のmyFirstView.phpはどんなデータを送っても何も反映されない。

まず、Viewにデータを送るためmyviewRouteをすこし修正する。

app/routes

Route::get('myview', function(){
    $name = 'Dick Choi';
    return View::make('myFirstView')->with('name',$name);
});

with()というMethodで$name変数を’name'という名前を付けて送っている。

with(データの名前, 送るデータ)

次は、Viewがもらったデータを処理するようにする。

app/views/myFirstView.php

<h1>Hello, <?php echo $name ?>!</h1>
<p>This is my first view</p>

Routeで送るとき使ったデータの名前がViewの変数になる。

結果はStep 2.と同じアドレスで確認できる。

http://localhost/mylaravel/public/myview

結果
lesson3-2.png

Step 4. Controllerを作る

じゃ、早速Controllerも作ってみよう。

Controllerはapp/controllersDirectoryに位置する。
今回はそこにMyController.phpを作る。

app/controllers/MyController.php

<?php

class MyController extends BaseController{
    function show(){
        $name = 'Junpei Simotsu';
        return View::make('myFirstView')->with('name',$name);
    }
}

まず、LaravelのControllerはBaseControllerClassを継承しなきゃならない。
そして、簡単にするためshow()というMethodはStep 3.のRouteに入っている関数のコードをほぼそのまま持ってきた。
(名前だけ変えて)

Step 5. RouteでControllerを呼ぶ。

myviewRouteをそのまま修正する。

app/routes.php

Route::get('myview', 'MyController@show');

見ているように文字列で呼ぶようになっていて、@の左にControllerの名前、@の右にMethodの名前がくる。

結果は同じところで確認できる。
http://localhost/mylaravel/public/myview

結果
lesson3-3.png

追加

Routeにコードを書いても同じなのに、なぜControllerにコードを起動させるのか。

簡単に言って可読性と生産性の問題だ。今はRouteが少ないからあまり問題がないが、実際の開発のときは
かなり多くのRouteを使って作業をする。

lesson3-4.png

もし、このときRouteにControllerのコードを直接書き込んだら、routes.phpのコードの量はすごく大きくなるし、
管理するときもすごく不便である。

だから、RouteとControllerを分けてプログラミングをした方がいい。