Laravelのライブラリ追加方法

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]タグを生成

公式サイト:Forms&HTML | laravelcollective

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識