Laravel5.4でFORMファサードを利用する方法


FORMファサード

Formファサードのレシピ

Laravel5では標準でインストールされない

Laravel 4では標準で組み込まれていたのですが、Laravel 5 からは別パッケージになり、ユーザーコミュニティーによってメンテナンスされるようになりました。

初めてのLARAVEL 5.1 : (16) FORMの作成

必要なもの

composerが必要です。
多分Laravel使ってる方は既にインストールしているかと思うのでインストール方法は割愛します。
インストールしていない方は別途調べて下さい。

Composerをインストールしてみたとかよいかも

試した環境

  • CentOS7
  • Laravel5.4
  • Composer 1.4.2
  • PHP7.0

方法

LaravelCollective公式サイトに記載してありました。
公式は英語で書かれているので、補足も交えて日本語でここに手順を書いておこうと思います。

LaravelCollective公式


上記のリンク先にあるコードをそのまま記載します。

パッケージをComposerからインストール

cd Laravelプロジェクト
composer require "laravelcollective/html":"^5.4.0"

composer require laravelcollective/html でもいいかと。

すると インストールが完了し、composer.jsonlaravelcollective/html項目が追加されます。

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0",
        "laravelcollective/html": "^5.4"
    },

ProviderとAliaseを登録

config/app.php のProviderとAliaseに追加します。

vim config/app.php

Providerを追加

  'providers' => [
    // ...
    Collective\Html\HtmlServiceProvider::class,
    // ...
  ],

Aliaseを追加

   'aliases' => [
    // ...
      'Form' => Collective\Html\FormFacade::class,
      'Html' => Collective\Html\HtmlFacade::class,
    // ...
  ],

これで使えるようになります。

ついでに

FORMファサードに関するメモを残しておこうと思います

{{}}と{!!!!}の違い

{{ }}は エスケープ処理あり
{!! !!}は エスケープ処理なし
基本的にエスケープ処理なしを使うようです

FORMファサードとヘルパ関数を一緒に使う場合

例えばテキスト入力欄

{!!Form::text('test_name', 'FROG', ['class' => 'test'])!!}

この場合、第2引数のFROGがvalue値になるのですが、
valueにoldヘルパを使いたい場合

{!!Form::text('test_name', old('test_name'), ['class' => 'test'])!!}

になる

と思ったけど、違うかもしれない..
誰か分かる方が居ましたら教えて下さい....

属性の増やし方

例えばテキストの場合

{!!Form::text('test_name', 'FROG', ['class' => 'test_name','ID' => 'test'])!!}

これだと
第一引数がname属性
第二引数がvalue属性
なのですが、属性を増やしたい場合は
第三引数に追加が可能です

labelを使う場合

上記のようにIDを追加可能ですが
labelのforと結びつけたい場合はtextの方にIDを書かなくても大丈夫になっています。

labelとtextの第一引数を同じ値にする必要があります

{!!Form::label('test_name','文字')!!}

{!!Form::text('test_name', 'FROG', ['class' => 'test_class'])!!}

上記のように書くと下記のようになる。

<label for="test_name">文字</label>

<input class="test_class" name="test_name" type="text" value="FROG" id="test_name">

nameとidが必然的に同じになるということですね..