【Laravel】ルーティング、ビューの整理
2019/11/30
Laravelのルーティング、ビューの基本を学習する
Laravelのインストールが終わりましたが、どこにビューファイルが有るのか、どうすればテスト用のファイルを表示することが出来るのかなどを引き続き学習したいと思います。
ルーティングとビューテンプレートの基本
ルーティング
ルーティングは以下のファイルにて設定されています。
laravel5test\routes\web.php
内容を見ると以下のようになってます。
1 2 3 |
Route::get('/', function () { return view('welcome'); }); |
英文のコメントが書いていますが、実質のコードはカッコも入れて3行です。
これでサーバ直下へアクセスすると welcome というビューテンプレートが呼び出され、画面が表示されるとのこと。
もう少し詳しく整理します。
書かれている内容を細分化していくと、まず大外として以下の関数が書かれています。
1 |
Route::get(アドレス, 関数など); |
ブラウザでのアクセスなので、アクセス方式はGETアクセスとなり、その場合のアクセスルート情報は Rout クラスの get という静的メソッドを使って設定します。
第1引数に割り当てる「アドレス」を、第2引数にはそれによって「呼び出される処理」を記述します。記述する処理には関数を指定することも、コントローラを指定することもあります。
getメソッドでアドレスと処理を割り当てるというのがルート情報設定の基本となります。
トップページのルート情報
では先程書き出した、welcome画面を表示している処理を見てみると、第1引数にはトップページを表す「/」、第2引数には関数が指定されています。
1 2 3 |
function () { return 値; } |
第2引数の関数を詳しく見ると、引数なしのクロージャ(無名関数)となっています。内部では return で戻り値を返しています。
この場合、returnで返される値が、そのアドレスにアクセスした際に表示される内容となります。
ここでは「view」という関数を使って戻り地を用意しています。
1 |
view( テンプレート名 ) |
この view関数は、指定したテンプレートをロードし、レンダリングする機能を持っています。
余談ですが、「無名関数」とはPHP5.3より導入された機能です。
ビューファイル
インストール直後に表示されるこの画面のビューファイル本体は下記パスに保存されています。
Laravel独自(?)のBLADE(ブレード)という、テンプレートシステムで作成されているとのことです。
laravel5test\resources\views\welcome.blade.php
ビューを追加して表示する
ルーティング設定(laravel5test\routes\web.php)へ下記内容を追記します。
1 2 3 |
Route::get('/info', function () { return view('info'); }); |
で、次に
1 |
<?php phpinfo(); ?> |
とだけ書いたファイルを「info.blade.php」というファイル名で、laravel5test\resources\views\ へ保存します。
Laravel はファイル名に 「.blade」 が含まれる場合、ビューファイルとみなすとのことです。
↑ ファイルを作成しました。
http://127.0.0.1:8000/info へアクセスすると、、、
おお、表示されました。
以上がルーティング機能を使ったビューファイルの表示とのことです。
通常はコントローラーとアクションを用いて表示するのが作法ですが、ルーティング設定でも表示させることが出来るということを覚えておくのも大事とのこと。
ふむふむ。
ルートパラメータの利用
せっかくなのでこのポストでもうひとつ学習しておきたいと思います。
先程あげた Route::get では、アクセスする際にパラメータを設定し、値を渡すことが出来るとのことなので実際に試してみたいと思います。
パラメータを指定、受け取りたい場合の記述方法は以下となります。
1 2 3 |
Route::get('/hoge/{パラメータ}', function ( $受け取る引数 ) { 処理 }); |
第1引数のアドレス部分に {パラメータ} という形でパラメータを用意。これで、{パラメータ} に指定されたテキスト部分がパラメータとして指定されます。
第2引数の関数では、パラメータの値を受け取る変数を引数として用意します。パラメータ名と同じ名前である必要はないとのことです。
パラメータは複数用意することも可能で、{パラメータ} で指定したパラメータの値は、そのまま関数の引数に渡されます。
ルーティング設定ファイル(\laravel5test\routes\web.php)へ、以下内容を記述します。
1 2 3 |
Route::get('/hello/{msg}', function ($msg) { return view('hello'); }); |
hello というアドレスへ、{msg}というパラメータで渡るようにしてみたくて作成しました。
次にテンプレートディレクトリ(\laravel5test\resources\views\)へ、hello.blade.php というファイルを新規作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Hello</title> </head> <body> <h1>Hello.blade.php</h1> <p>{$msg}</p> </body> </html> |
パラメータ(mag)を「HelloLaravel」として、http://127.0.0.1:8000/hello/HelloLaravel へアクセスすると。。。
ありゃ、ダメですね。
というのも、ルーティングファイルでいきなり引数を渡しても、ビューへ渡っていないということでしょうね。
このあたりの処理をするには、やはりコントローラーが必要になってくるはずです。
んで、さすがにこのままにしておくのも忍びないので、どうにか表示させてみたいと思います。
ルーティング用の設定ファイルを以下のように改造。
ビューファイルは使用しません(削除しても問題ありません)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Route::get('/hello/{msg}', function ($msg) { $html = <<<EOF <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Hello</title> </head> <body> <h1>Hello.blade.php</h1> <p>{$msg}</p> </body> </html> EOF; return $html; }); |
アクセスすると、、、
裏技のような気もしますが、おいおい理解できればよいなと思います。