#Route
ルートとは、ユーザーからのリクエストを受け取ってコントローラーに渡す役割と(コントローラーについては後述)、コントローラーから受け取った情報をユーザーへ返す役割を担う。いわば仲介人。
はじめにルートへどんな情報が渡され、ブラウザにどんな情報が表示されるのかを見る。
##テスト1
Route::get('hello',function(){
return '<html><body><h1>hello world</h1></body></html>';
});
##テスト2
resources/views/hello.php
を以下の内容で作成
<html>
<head>
<title>Sample</title>
</head>
<body>
<h1>hello world</h1>
<p><?php echo $message; ?></p>
</body>
</htm>
route.php
を以下のように編集
Route::get('/hello', function () {
return view('hello', ['message' => 'hello!']);
});
##ここまででわかること
GETメソッドの中には、ユーザーが入力したアドレスとそれに応じたメソッドが書かれている。例えば、/hello
にアクセスした場合にfunctuion()
が実行されるといった具合。
function()
は直接html文を返すこともできれば、view関数で別のphpファイルを参照して返すこともできる。
#Controller
コントローラーとは、ルートから受け取った情報をモデルに処理をお願いする役割と、モデルから受け取った情報をビューに表示する役割がある。
コントローラーは、$ php artisan make:controller [コントローラー名]
で作成できる。
##テスト3
- コントローラーを作成する前に、ルートに新しく作るコントローラーを記述しておく。
Route::get('hello','Hello_Controller@getIndex');
[コントローラー名@メソッド名]
で、そのコントローラーのメソッドへアクセスできる。
-
コントローラーの作成
$ php artisan make:controller Hello_Contoroller
-
コントローラーの中身は以下。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Hello_Controller extends Controller
{
public function getIndex()
{
return view('hello');
}
}
クラスは自動生成されるはずなので、メソッドだけ追加。
getIndexメソッドで、hello.php
のファイル名を引数とするview関数を返す。
- 先ほどの
hello.php
では、<p>
タグの中で$message
を出力していたが、今回は単にコントローラーでこのphpファイルを呼んでいるだけなので、$messageに値が代入されず、エラーになる。
そのため、この部分を<p>hello controler</p>
くらいにしておく。
#テンプレート
- 上記の方法だと、1ページごとにhtml文を記述しないといけなくなるため、larabelではbladeというテンプレートエンジンを使用する。
以下のlayout.blade.phpはテンプレートファイルとなる。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>@yield('title')</title>
</head>
<body>
@section('sidebar')
<div class="container">
@yield('content')
</div>
</body>
</html>
@extends('layout')
@section('title', 'Page Title')
@section('sidebar')
<p>ここはメインのサイドバーに追加される</p>
@endsection
@section('content')
<p>ここが本文</p>
@endsection
-
@extend('layout')
はlayout.blade.php
を継承することを表す。 - テンプレートファイルの
@yield
部分に、子ファイルの@section
~@endsection
内の記述が挿入される。