31
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelチュートリアル ~[@extends]編~

Last updated at Posted at 2017-07-26

Laravel歴0ヶ月の17新卒が継承についてまとめてみた!!

できた内容をアウトプットすることで
他の方のお役に立てればと思っております。

また間違っている場合はご指摘ください。

環境紹介

laradockをベースに

Name Version
CentOS 7.x
MySQL 5.5
php 5.6
Apache 2.2
Laravel 5.4

で立ち上げております

ディレクトリ構成としては

laravel
├ web
└ laradock
     ├ Workspace
     ├ Apache2
     ├ MySQL
     └ php

いざ[@extends]についてのチュートリアル

[@extends]って何よ?

一言でいうと テンプレートの継承 に利用されるもの

簡単な例をみてみましょう

⭐️layout

ここではレイアウトのメイン部分を作っています。
いわば枠組み的な感じです。

@yield('content')がのちにどういう意味になるかを説明したいと思います。

$ mkdir resources/views/layouts
$ vim resources/views/layouts/layout.blade.php
layout.blade.php
<!DOCTYPE HTML>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザー一覧</title>
</head>
<body>

    @yield('content')

</body>
</html>

⭐️index

@extendsでlayoutsフォルダの中にあるlayout.blade.phpを継承します

@section@extends内の@yield('content')部分に
@endsection部分までを表示させる宣言をしています。

$ vim resources/views/index.blade.php
index.blade.php
@extends('layouts.layout')

@section('content')
    <h1>ユーザー名: {{ $user_name }}</h1>
@endsection

⭐️UsersController

ここではaboutという関数を作り
user_nameという変数にドラえもんを入れ
それをviewのindexの中へリターンするという処理を書いてます

compact関数は変数名とその値から配列を作成する為応用的に使えると思っています。

$ php artisan make:controller UsersController
$ vim vim app/Http/Controllers/UsersController
UsersController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
	public function about()
	{
		$user_name = "ドラえもん";

		return view('index', compact('user_name'));
	}
}

⭐️Routes

localhostへアクセスした際UsersController内のabout関数が呼び出されるようになっています

$ vim routes/web.php
web.php
<?php

Route::get('/', 'UsersController@about');

⭐️アクセス

ユーザー名:ドラえもん

解説

Laravelのテンプレートエンジンであるbladeの書式を使って変数を表示しています。

@extendsではlayoutsの中にあるlayoutを継承するという宣言をここでしています。

@extends('layouts.layout')

そしてその継承したlayoutの中にあるcontent部分に以下を挿入みたいな感じです

@section('content')
    <h1>ユーザー名: {{ $user_name }}</h1>
@endsection

公式にはこのように書いてあります

子のページを定義するには、「継承」するレイアウトを指定する、
Blade @extendsディレクティブを使用します。
Bladeレイアウトを拡張するビューは、
@sectionディレクティブを使用しレイアウトのセクションに内容を挿入します。

つまり、 @yield の部分に contentのsection が入りますよという感じです。

まとめ

テンプレートエンジンはとても優秀

次回はデータベースからデータを取得し表示するものを紹介したいと思います。

成果物

31
26
0

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
31
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?