LoginSignup
11
13

More than 5 years have passed since last update.

【laravel入門】ルート、コントローラー、テンプレートエンジンの基本まとめ

Posted at

Route

ルートとは、ユーザーからのリクエストを受け取ってコントローラーに渡す役割と(コントローラーについては後述)、コントローラーから受け取った情報をユーザーへ返す役割を担う。いわば仲介人。
はじめにルートへどんな情報が渡され、ブラウザにどんな情報が表示されるのかを見る。

テスト1

route.php
Route::get('hello',function(){
    return '<html><body><h1>hello world</h1></body></html>';
});

1.png

テスト2

resources/views/hello.phpを以下の内容で作成

hello.php
<html>
<head>
        <title>Sample</title>
</head>
<body>
<h1>hello world</h1>
<p><?php echo $message; ?></p>
</body>
</htm>

route.phpを以下のように編集

route.php
Route::get('/hello', function () {
    return view('hello', ['message' => 'hello!']);
});

結果
2.png

ここまででわかること

GETメソッドの中には、ユーザーが入力したアドレスとそれに応じたメソッドが書かれている。例えば、/helloにアクセスした場合にfunctuion()が実行されるといった具合。
function()は直接html文を返すこともできれば、view関数で別のphpファイルを参照して返すこともできる。

Controller

コントローラーとは、ルートから受け取った情報をモデルに処理をお願いする役割と、モデルから受け取った情報をビューに表示する役割がある。
コントローラーは、$ php artisan make:controller [コントローラー名]で作成できる。

テスト3

  • コントローラーを作成する前に、ルートに新しく作るコントローラーを記述しておく。
route.php
Route::get('hello','Hello_Controller@getIndex');

[コントローラー名@メソッド名]で、そのコントローラーのメソッドへアクセスできる。

  • コントローラーの作成
    $ php artisan make:controller Hello_Contoroller

  • コントローラーの中身は以下。

Hello_Contoroller.php
<?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.png

テンプレート

  • 上記の方法だと、1ページごとにhtml文を記述しないといけなくなるため、larabelではbladeというテンプレートエンジンを使用する。 以下のlayout.blade.phpはテンプレートファイルとなる。
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>

child.php
@extends('layout')
@section('title', 'Page Title')

@section('sidebar')

  <p>ここはメインのサイドバーに追加される</p>
@endsection

@section('content')
  <p>ここが本文</p>
@endsection
  • @extend('layout')layout.blade.phpを継承することを表す。
  • テンプレートファイルの@yield部分に、子ファイルの@section~@endsection内の記述が挿入される。

結果

1.png

11
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13