Edited at

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

More than 1 year has passed since last update.


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公式

スクリーンショット_2017-06-23_15_44_22.png

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


パッケージを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が必然的に同じになるということですね..