Lravel5の最初の1ページ

  • ルーティング
  • コントローラ
  • ビュー
    を設定してトップページを作成します。

ルーティング

まずはデフォルトのルーティングの設定を見てみると

$ php artisan route:list
+--------+----------+----------+------+---------+--------------+
| Domain | Method   | URI      | Name | Action  | Middleware   |
+--------+----------+----------+------+---------+--------------+
|        | GET|HEAD | /        |      | Closure | web          |
|        | GET|HEAD | api/user |      | Closure | api,auth:api |
+--------+----------+----------+------+---------+--------------+

デフォルトでは2つのルーティングが設定してあるようです。
いろいろいっぱい設定したらこのコマンドでURIリストが出るのでとても便利です。Symfony2とかと同じです。
実際のルーティングファイルは、

routes/web.php

にあるので、これを編集します。(時々インストール直後にこのファイルがないときがあるんですが。)
デフォルトは上記のようにトップページのwelcomeページのみのルーティングが設定されています。api/userの方はapi.phpに設定されてます。これはちょっとややこしいのでAPI開発時に詳しく勉強しましょう。

文字列だけ返すページ

/sampleにアクセスするとsampleという文字列だけ返すページを作ります。Laravelもまたいわゆるドメイン駆動型のフレームワークなので、パスを指定してあげるとそのパスに応じたルーティングを行い指定したレスポンスをするというシンプルなものです。

//[routes/web.php]
....
Route::get('/sample', function () {
    return 'sample';
});
....

routes/web.phpに上記のコードを追記します。http://example.com/sampleにアクセスするとsampleという文字列が表示されます。また、先の”php artisan route:list”をコマンドで実行するとルーティングのリストに追加
されている筈です。

+--------+----------+----------+------+---------+--------------+
| Domain | Method   | URI      | Name | Action  | Middleware   |
+--------+----------+----------+------+---------+--------------+
|        | GET|HEAD | /        |      | Closure | web          |
|        | GET|HEAD | api/user |      | Closure | api,auth:api |
|        | GET|HEAD | sample   |      | Closure | web          |
+--------+----------+----------+------+---------+--------------+

しかしこれだけだと実際のページを作るのは困難なので、テンプレートを使って返却するようにします。

LaravelのテンプレートエンジンBladeを使ってページを表示する

次にviewのテンプレートを使ってページを作成してみます。テンプレートは、

resources/views/*.php

に設定します。すでにデフォルトのwelcome.blade.phpが存在する筈です。これは.phpとなっていますが、実際のPHPファイルとは違ってPHPやHTML以外のコード、Bladeのコードも動かすことができます。慣例的にそれらを区別するために、

resources/views/[TEMPLATE_NAME].blade.php

とすることが多いようです。ここでもその慣例に従うことにします。
以下のようにsample.blade.phpを作成してみましょう。

<!--[resources/views/sample.blade.php]-->
<!DOCTYPE html>
<html lang="{{ config('app.locale') }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
    </head>
    <body>
    sample
    </body>
</html>

さてこのテンプレートを表示させるためのルーティングのコードは、

Route::get('/sample', function () {
    return view('sample');
});

とします。returnにview()関数を返してあげて、パラメーターにテンプレート名を与えてあげます。テンプレートをディレクトリで分ける場合はそのパスを指定あげればOKです。

resources/views/sample/index.blade.php
Route::get('/sample', function () {
    return view('sample/index');
});

コントローラを使う

せっかくのフレームワークなのでコントローラを使わないということが殆どないわけなので、ここからが実践的な使い方になろうかと思います。
小さなコントローラはルーティング時のRoute::getに無名関数というか、いわゆるクロージャとして記述することができます。しかし何百行もあるようなコードをルーティングと同時に記述するのはあまりよい作法とは言えません。そこでコントローラはコントローラのファイルとして分けて記述することになるわけです。
手続き的には、
– ルーティング(ルーティング(アクセスパス)で、どのコントローラを使うのかを指定) */sample
– コントローラ(処理後にどのテンプレートに渡すのかを指定) *
– ビュー(テンプレート) *
という流れになります。

コントローラを使うルーティング

コントローラはデフォルトではここに格納されています。ちょっと階層が深くて嫌な場所にありますが問題なければここを使うことにしましょう。

app/Http/Controllers/*.php

さて、これらのコントローラはControllerクラスあるいはBaseControllerクラスのエクステンションになります。なので、勝手に独自クラスを作成するというのはもっと深い階層(抽象度の高い階層)で行う必要があります。
ここではシンプルに拡張クラスとしてコントローラを作成します。

//[app/Http/Controllers/SampleController.php]
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class SampleController extends Controller
{
    public function index()
    {
        return view('sample/sample_ctrl');
    }
}

namespaceとして自分自身のパスを設定してあげて、useでは最低限App\Http\Controllers\Controller;ぐらい呼んであげて、ControllerクラスのエクステンションとしてSampleControllerを作成するといった感じです。メソットはindex()だけつくって、返り値に最終的な行き先のテンプレートsample/sample_ctrlを呼んであげましょう。
さて、こういったコントローラを呼び出すルーティング側の文法は以下のようになります。

// [routes/web.php]
// Route::get('/[ACCESS_PATH]', '[CONTROLLER_NAME]@[METHOD]');
Route::get('/sample_ctrl', 'SampleController@index');

/sample_ctrlにアクセスするとSampleController.phpがコントローラとして起動しindex()メソッドを実行します。指定メソッドで返しているテンプレートが表示されるという具合です。
テンプレートは表示確認だけなので適当に作っておきます。

<!--[resources/views/sample/sample_ctrl.blade.php]-->
sample ctrl

ここまでが基本中の基本みたいな使い方になります。

簡単な設計

Laravelで何らかのWebアプリを作成するときに注意したいのが、

  • アクセスパス
  • コントローラ
  • ビュー

の一貫性というか命名規則です。Laravelはこれらを自由に設定できるために規則を作っておかないとかなり混乱します。
/aaaにアクセスするとBbbControllerが起動しccc.blade.phpで表示されるなんてことにしてしまうと、大変なことになってしまうので、少なくともここでは、

  • アクセスパス /aaa
  • コントローラ AaaController.php
  • ビュー aaa.blade.php

というルールが必要です。ここは人間が決めるところなので、開発グループなどメンバー内で充分に吟味するのがよいかと思います。


基本的なルーティング

Last update: 2017.04.23 (日)