Tips

2015.01.30

Windows XAMPP で Laravel Blade

Windows用XAMPP+Laravel Bladeを使ってみる

  • ※XAMPPのインストールフォルダはD:/dev/xamppにインストールします。
  • ※XAMPPのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/38933″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (XAMPP V1.8.3インストール)[/styled_link]
  • ※Composerのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/38972″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (COMPOSER 1.0.0-ALPHA8インストール)[/styled_link]
  • ※Laravelのインストールしていない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/39295″ textColor=”#000000″]WINDOWS XAMPP にて LARAVEL をインストール (LARAVEL V4.2インストール)[/styled_link]
  • ※Laravelの環境設定していない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/39416″ textColor=”#000000″]Windows XAMPP で Laravel 環境設定[/styled_link]
  • ※LaravelのDB設定していない場合は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/40368″ textColor=”#000000″]Windows用XAMPP+Laravel DB設定[/styled_link]
  • ※Modelを利用するので、Eloquentを読んでいない方は、[styled_link link=”https://techpjin.sakura.ne.jp/techpjin_new/archives/40435″ textColor=”#000000″]Windows用XAMPP+Laravel Eloquentを使ってみる[/styled_link]

Bladeとは

Laravelで利用できるテンプレートエンジンです。
フロー制御、条件分岐、エスケープ処理などが簡単に書くことができます。
特に継承が出来るので、親テンプレートでパターンを決めておくと、熟練度によりますが、かなり開発工数を削減出来ると思います。
共通ロジックなどは親テンプレートにまとめておくと、全体の変更を簡単に行うことが出来るようになります。

今回は継承などは気にせず、簡単な使い方を説明します。

Userモデルを利用して、登録、更新、削除を実行する画面を作成

前回Userモデルを作成しましたので、今回はそのモデルを利用して、登録・更新・削除を実行する画面を作成します。
親テンプレートを利用していないので、ファイルは1つになります。

Bladeはファイルの拡張子を「.blade.php」とします。
今回はUserモデルを利用することから「user.blade.php」としています。

Bladeは「views」フォルダーの下に作成します。
まずは、user.blade.phpの内容を見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Laravel dragon ユーザサンプル</title>
	<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
	<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
	<!--[if lt IE 9]>
		<script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
		<script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
	<![endif]-->
	<style>
		*{
			font-family: "メイリオ";
		}
		body {
			padding-top: 30px;
		}
	</style>
</head>
<body>
	<div class="navbar navbar-fixed-top navbar-inverse" role="navigation">
		<div class="container">
			<div class="navbar-header">
				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
					<span class="sr-only">navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="#">Dragon</a>
			</div>
			<div class="navbar-collapse collapse">
				<ul class="nav navbar-nav">
					<li class="active"><a href="#">active</a></li>
				</ul>
			</div><!--/.nav-collapse -->
		</div>
	</div>

	<div class="container">
		<div class="page-header">
			<h2>
			<span class="glyphicon glyphicon-user"></span>
			ユーザ一覧
			</h2>
		</div>

		<div class="row">
			<div class="col-xs-12 col-lg-12">
				<form action="/user/create" method="post" class="form-horizontal">
					<div class="form-group">
						<label for="name" class="col-xs-2">名前</label>
						<div class="col-xs-4">
							<input type="text" name="name" id="name" class="form-control">
						</div>
					</div>
					<div class="form-group">
						<label for="email" class="col-xs-2">メールアドレス</label>
						<div class="col-xs-4">
							<input type="text" name="email" id="email" class="form-control">
						</div>
					</div>
					<div class="form-group">
						<label for="tel" class="col-xs-2">電話</label>
						<div class="col-xs-4">
							<input type="text" name="tel" id="tel" class="form-control">
						</div>
					</div>
					<div class="form-group">
						<label for="zip" class="col-xs-2">住所</label>
						<div class="col-xs-10">
							<div class="row">
								<div class="col-xs-2">
									<input type="text" name="zip" id="zip" class="form-control">
								</div>
								<div class="col-xs-7">
									<input type="text" name="address" id="address" class="form-control">
								</div>
							</div>
						</div>
					</div>
					<div class="form-group">
						<div class="col-xs-offset-2 col-xs-4">
							<button type="submit" class="btn btn-success">登録</button>
						</div>
					</div>

				</form>
			</div>
		</div>

		<hr>

		<div class="row">
			<div class="col-xs-12 col-lg-12">
				<table class="table">
					<thead>
						<th>切替</th>
						<th>操作</th>
						<th>#</th>
						<th>名前</th>
						<th>メール</th>
						<th>電話</th>
						<th>住所</th>
					</thead>
					<tbody>

				@foreach ($users as $user)
						<tr>
							<td>
							<button type="button" class="btn btn-info action-update">操作切替</button>
							</td>
							<td>
							<form action="/user/delete" method="post">
								<input type="hidden" name="id" value="{{{$user->id}}}">
								<button type="submit" class="btn btn-default">削除</button>
							</form>
							</td>
							<td>{{{$user->id}}}</td>
							<td>{{{$user->name}}}</td>
							<td>{{{$user->email}}}</td>
							<td>{{{$user->tel}}}</td>
							<td>{{{$user->zip}}}&nbsp;{{{$user->address}}}</td>
						</tr>
						<form action="/user/update" method="post">
						<tr class="hidden">
							<td>
								<button type="button" class="btn btn-info action-delete">操作切替</button>
							</td>
							<td>
								<input type="hidden" name="id" value="{{{$user->id}}}">
								<button type="submit" class="btn btn-warning">更新</button>
							</td>
							<td>{{{$user->id}}}</td>
							<td><input type="text" class="form-control" name="name" value="{{{$user->name}}}"></td>
							<td><input type="text" class="form-control" name="email" value="{{{$user->email}}}"></td>
							<td><input type="text" class="form-control" name="tel" value="{{{$user->tel}}}"></td>
							<td>
								<div class="row">
									<div class="col-xs-3">
										<input type="text" class="form-control" name="zip" value="{{{$user->zip}}}">
									</div>
									<div class="col-xs-9">
										<input type="text" class="form-control" name="address" value="{{{$user->address}}}">
									</div>
								</div>
							</td>
						</tr>
						</form>
				@endforeach

					</tbody>
				</table>
			</div>
		</div>
	</div><!-- /container -->

	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
	<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
	<script>
		$(function(){
			$('.action-update').on('click', function(){
				$(this).parents('tr').hide().next().next().removeClass('hidden').show();
			});
			$('.action-delete').on('click', function(){
				$(this).parents('tr').hide().prev().prev().show();
			});
		});
	</script>
</body>
</html>

Bladeの記述

このテンプレートで利用しているBladeの記述は2つです。

  1. @foreach@endforeach
  2. {{{ exp }}}

1.@foreach

phpのforeachと殆ど変わりがない感じで利用できます。
@foreach ($users as $user) とありますが、$users の一つの要素を $user へ代入して、ループ内を実行します。
キーが欲しい場合は、phpと同様に $users as $key => $value のように $key => を追加します。

ちなみにfor文は @for($i=0; $i<count($users); $i++) のように記載します。
中括弧(波括弧)がないだけで、ほぼ同じような記述です。

2.{{ exp }} {{{ exp }}}

{{ exp }}<?= ?> と同様な意味になります。
中に指定した変数を出力するというものです。
中括弧が2つ指定と3つ指定があります。2つの場合はHTMLをエスケープしません。
3つ指定すると変数にHTMLの特殊文字がある場合にエスケープ処理を行います。
<?= htmlspecialchars( exp ) ?> と同様な動きをします。

WEBアプリケーション関連 人気連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search