【RailsユーザのためのPHP/Laravel】form_for的なのを使いたい

  • 3
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Laravel芸人見習いのすろっくさんですよ! フォームヘルパーつかいたいですね!

フレームワーク芸人たるもの、直接ビューを書いてもいい場合は書くわけですが、当然ビューヘルパーは使いたいですね。Railsでいうform_for、form_tag、input_tagみたいなああいうのです。

ですが、Laravelは4までは組み込まれていたんですが、5からは別パッケージになってしまったみたいです。時代の流れからか、WAFがJsonかえしてくれりゃーええでっていう時代なんで、まあ流れ的に仕方ないのかもしれませんが。

あまりモノシリックにしないのが世の流れなのかもですね!

それはさておき、わざわざReactとかやりたくねーなーっていうサーバサイドエンジニアもいると思うんで、フォームヘルパーがちゃんと用意されています。laravelcollective/htmlってのがそれです。

デフォルトではつかえないので、composerつかっていれましょう。

注意点ですが、Laravel5がリリースされたばっかの記事をみていると、illuminate/htmlをインストールさせる記事がちらほらあります。このパッケージはメンテされてないのでつかっちゃだめです。illuminate/htmlをインストール!とか書いてあったらそのサイトは信じちゃダメです! 約束だよ!

ダメな例

モジュールインストール

 composer require "illuminate/html:5.0.*"

config/app.phpで読み込み

return [
    // サービス・プロバイダーの登録
     // * 書き方違う
    'providers' => [

        // ...

        'Illuminate\Html\HtmlServiceProvider',
    ],

    // ファサードの登録
     // * 書き方違う
    'aliases' => [

        // ...
        'Form'      => 'Illuminate\Html\FormFacade',
        'HTML'      => 'Illuminate\Html\HtmlFacade',
    ].

こういう書き方を推奨する記事は古いんでダメです。参考にしちゃダメです。おとなしくlaravelcollectiveを使いましょう。

LaravelCollectiveを使う

インストールはこんぽーさーさんで終わりです。らくらく。

composer require laravelcollective/html

インストールできたら設定をconfig/app.phpに書きます。

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

上のprovidersをプロバイダ、aliasesをファサードというらしいです。

大体のフレームワークに言えることですが、なんか新しい用語でてきても初めはぶっとばしていかないと楽しくないです。仕事で使うなら会話で「プロバイダってなに?」「ファサードってなに?」ってふんわり覚えておくくらいは必要ですが、技術を趣味でいじるときに細かいところこだわるとしんどくなるんで、詳細はすっ飛ばします。ただ、Laravelではモジュールを追加してヘルパーいれるときはここに追記が必要なようです。

これでフォームヘルパーが使えるようになりました!

あとはresource/views以下のbladeとかに

{!! Form::label('title', 'Title:') !!}
{!! Form::text('title',[わたしたいパラメータのvalue。なければnull], ['class' => '[クラス名]']) !!}

みたいに書くとヘルパー使えます。よかったね!