2018/10/12
Laravelには便利なライブラリがたくさんあります。
今回は その内の一つLaravelCollective/html のパッケージを入れてみます。
LaravelCollective/htmlとは
Laravel のビューでフォームを記述するには直接HTMLを記述する方法とヘルパー関数(HTML/Formヘルパー)を使う方法があります。
ヘルパー関数を使う場合はこのパッケージをcomposerでインストールする必要があります。
なお、LaravelCollective/htmlはLaravel4では標準で組み込まれていたのですが、Laravel5からは別パッケージになりました。
目的
composerでLaravelCollective/htmlをインストールしてHTMLヘルパー・Formヘルパーを使えるようにする。
手順
【1】composerでインストール
【2】config/app.phpの編集
1)サービス・プロバイダーの登録
2)ファサードの登録
【3】Formヘルパーを使ってFormを作成
【1】composerでインストール
laravelcollective/htmlパッケージのバージョンを指定してインストールします。
※Laravel5.2の場合、最新のパッケージがインストールできないケースがあるため
composer require "laravelcollective/html": "5.2.*"
【2】config/app.phpの編集
パッケージを追加するには config/app.php に
1)サービス・プロバイダーの登録
2)ファサードの登録
この二つの設定が必要になります。
1)サービス・プロバイダーの登録
'providers' => [ :(省略) Collective\Html\HtmlServiceProvider::class, // 追加 ],
Laravelはサービス毎に初期処理を定義し、実行する仕組みを持っています。
その仕組や、実際に初期処理の実装を行うクラスのことをサービスプロバイダーと言います。
2)ファサードの登録
'aliases' => [ :(省略) 'Form' => Collective\Html\FormFacade::class, // 追加 'Html' => Collective\Html\HtmlFacade::class, // 追加 ],
ファサードはサービスコンテナ(クラス間の依存性を管理する為の仕組み)からオブジェクトへのアクセスを提供するクラスです。
【3】Formヘルパーを使ってFormを作成
HTMLで記述する場合は以下のようになります。
:(省略) <form method="POST" action="/articles/create" accept-charset="UTF-8"> <input name="_token" type="hidden" value="<?php echo csrf_token(); ?>"> <div class="form-group"> <label for="title">Title:</label> <input class="form-control" name="title" type="text" id="title"> </div> <div class="form-group"> <label for="body">Body:</label> <textarea class="form-control" name="body" cols="50" rows="10" id="body"></textarea> </div> <div class="form-group"> <label for="published_at">Publish On:</label> <input class="form-control" name="published_at" type="date" value="2015-03-04" id="published_at"> </div> <div class="form-group"> <input class="btn btn-primary form-control" type="submit" value="Add Article"> </div> </form> :(省略)
これをFormヘルパーを使うと以下のようになります。
:(省略) {!! Form::open(['url' => '/articles/create']) !!} …(1) <div class="form-group"> {!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('body', 'Body:') !!} {!! Form::textarea('body', null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('published_at', 'Publish On:') !!} {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::submit('Add Article', ['class' => 'btn btn-primary form-control']) !!} </div> {!! Form::close() !!} :(省略)
(1)デフォルトではPOSTメソッドで送信します。
- 他のメソッドを指定する場合 -
{!! Form::open(['url'=>'/articles/create','method'=>'put']) !!}
Formヘルパーでフォームを作成する場合はCSRFの記述はしなくてもいいです。
自動的に挿入されます。
blade テンプレートの表記
{{ }}・・・エスケープ処理あり
{{!! !!}}・・・エスケープ処理なし
※Formヘルパーで記述するときはエスケープ処理なしを使います。
Form::open() formの開始タグを生成
Form::close() formの終了タグを生成
Form::label() labelタグを生成
Form::input() inputタグを生成
Form::text() input[type=text]タグを生成
Form::textarea() textareaタグを生成
Form::submit() input[type=submit]タグを生成
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。