laravelcollective5.3 Forms & HTML

Installation

Begin by installing this package through Composer. Run the following from the terminal:

composerrequire"laravelcollective/html":"^5.3.0"

Next, add your new provider to theprovidersarray ofconfig/app.php:

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

Finally, add two class aliases to thealiasesarray ofconfig/app.php:

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

Looking to install this package inLumen? First of all, making this package compatible with Lumen will require some core changes to Lumen, which we believe would dampen the effectiveness of having Lumen in the first place. Secondly, it is our belief that if you need this package in your application, then you should be using Laravel anyway.

Opening A Form

Opening A Form

{!!Form::open(['url'=>'foo/bar'])!!}//{!!Form::close()!!}

By default, aPOSTmethod will be assumed; however, you are free to specify another method:

echoForm::open(['url'=>'foo/bar','method'=>'put'])

Note:Since HTML forms only supportPOSTandGET,PUTandDELETEmethods will be spoofed by automatically adding a_methodhidden field to your form.

You may also open forms that point to named routes or controller actions:

echoForm::open(['route'=>'route.name'])echoForm::open(['action'=>'Controller@method'])

You may pass in route parameters as well:

echoForm::open(['route'=>['route.name',$user->id]])echoForm::open(['action'=>['Controller@method',$user->id]])

If your form is going to accept file uploads, add afilesoption to your array:

echoForm::open(['url'=>'foo/bar','files'=>true])

Form Model Binding

Opening A Model Form

Often, you will want to populate a form based on the contents of a model. To do so, use theForm::modelmethod:

echoForm::model($user,['route'=>['user.update',$user->id]])

Now, when you generate a form element, like a text input, the model's value matching the field's name will automatically be set as the field value. So, for example, for a text input namedemail, the user model'semailattribute would be set as the value. However, there's more! If there is an item in the Session flash data matching the input name, that will take precedence over the model's value. So, the priority looks like this:

Session Flash Data (Old Input)

Explicitly Passed Value

Model Attribute Data

This allows you to quickly build forms that not only bind to model values, but easily re-populate if there is a validation error on the server!

Note:When usingForm::model, be sure to close your form withForm::close!

Form Model Accessors

Laravel’sEloquent Accessorallow you to manipulate a model attribute before returning it. This can be extremely useful for defining global date formats, for example. However, the date format used for display might not match the date format used for form elements. You can solve this by creating two separate accessors: a standard accessor,and/ora form accessor.

To use form accessors, first include theFormAccessibletrait in the model then create aformFooAttributemethod on your model whereFoois the “camel-cased” name of the column you wish to access. In this example, we’ll define an accessor for thedate_of_birthattribute. The accessor will automatically be called by the HTML Form Builder when attempting to pre-fill a form field whenForm::model()is used.


* Get the user’s date of birth.

*

* @param  string  $value

* @return string

*/publicfunctiongetDateOfBirthAttribute($value){returnCarbon::parse($value)->format('m/d/Y');}/**

* Get the user's date of birth for forms.

*

* @param  string  $value

* @return string

*/publicfunctionformDateOfBirthAttribute($value){returnCarbon::parse($value)->format('Y-m-d');}}

CSRF Protection

If you use theForm::openorForm::modelmethod withPOST,PUTorDELETEthe CSRF token used by Laravel for CSRF protection will be added to your forms as a hidden field automatically. Alternatively, if you wish to generate the HTML for the hidden CSRF field, you may use thetokenmethod:

echoForm::token();

For more information on Laravel’s CSRF protection, seethe relevant section in Laravel’s documentation.

Labels

Generating A Label Element

echoForm::label('email','E-Mail Address');

Specifying Extra HTML Attributes

echoForm::label('email','E-Mail Address',['class'=>'awesome']);

Note:After creating a label, any form element you create with a name matching the label name will automatically receive an ID matching the label name as well.

Text, Text Area, Password & Hidden Fields

Generating A Text Input

echoForm::text('username');

Specifying A Default Value

echoForm::text('email','example@gmail.com');

Note:Thehiddenandtextareamethods have the same signature as thetextmethod.

Generating A Password Input

echoForm::password('password',['class'=>'awesome']);

Generating Other Inputs

echoForm::email($name,$value=null,$attributes=[]);echoForm::file($name,$attributes=[]);

Checkboxes and Radio Buttons

Generating A Checkbox Or Radio Input

echoForm::checkbox('name','value');echoForm::radio('name','value');

Generating A Checkbox Or Radio Input That Is Checked

echoForm::checkbox('name','value',true);echoForm::radio('name','value',true);

Number

Generating A Number Input

echoForm::number('name','value');

Date

Generating A Date Input

echoForm::date('name',\Carbon\Carbon::now());

File Input

Generating A File Input

echoForm::file('image');

Note:The form must have been opened with thefilesoption set totrue.

Drop-Down Lists

Generating A Drop-Down List

echoForm::select('size',['L'=>'Large','S'=>'Small']);

Generating A Drop-Down List With Selected Default

echoForm::select('size',['L'=>'Large','S'=>'Small'],'S');

Generating a Drop-Down List With an Empty Placeholder

This will create anelement with no value as the very first option of your drop-down.

echoForm::select('size',['L'=>'Large','S'=>'Small'],null,['placeholder'=>'Pick a size...']);

Generating a List With Multiple Selectable Options

echoForm::select('size',['L'=>'Large','S'=>'Small'],null,['multiple'=>true]);

Generating A Grouped List

echoForm::select('animal',['Cats'=>['leopard'=>'Leopard'],'Dogs'=>['spaniel'=>'Spaniel'],]);

Generating A Drop-Down List With A Range

echoForm::selectRange('number',10,20);

Generating A List With Month Names

echoForm::selectMonth('month');

Buttons

Generating A Submit Button

echoForm::submit('Click Me!');

Note:Need to create a button element? Try thebuttonmethod. It has the same signature assubmit.

Custom Macros

Registering A Form Macro

It's easy to define your own custom Form class helpers called "macros". Here's how it works. First, simply register the macro with a given name and a Closure:

Form::macro('myField',function(){return'';});

Now you can call your macro using its name:

Calling A Custom Form Macro

echoForm::myField();

Custom Components

Registering A Custom Component

Custom Components are similar to Custom Macros, however instead of using a closure to generate the resulting HTML, Components utilizeLaravel Blade Templates. Components can be incredibly useful for developers who useTwitter Bootstrap, or any other front-end framework, which requires additional markup to properly render forms.

Let's build a Form Component for a simple Bootstrap text input. You might consider registering your Components inside a Service Provider'sbootmethod.

Form::component('bsText','components.form.text',['name','value','attributes']);

Notice how we reference a view path ofcomponents.form.text. Also, the array we provided is a sort of method signature for your Component. This defines the names of the variables that will be passed to your view. Your view might look something like this:

// resources/views/components/form/text.blade.php{{Form::label($name,null,['class'=>'control-label'])}}{{Form::text($name,$value,array_merge(['class'=>'form-control'],$attributes))}}

Custom Components can also be created on theHtmlfacade in the same fashion as on theFormfacade.

Providing Default Values

When defining your Custom Component's method signature, you can provide default values simply by giving your array items values, like so:

Form::component('bsText','components.form.text',['name','value'=>null,'attributes'=>[]]);

Calling A Custom Form Component

Using our example from above (specifically, the one with default values provided), you can call your Custom Component like so:

{{Form::bsText('first_name')}}

This would result in something like the following HTML output:

First Name

Generating URLs

link_to

Generate a HTML link to the given URL.

echolink_to('foo/bar',$title=null,$attributes=[],$secure=null);

link_to_asset

Generate a HTML link to the given asset.

echolink_to_asset('foo/bar.zip',$title=null,$attributes=[],$secure=null);

link_to_route

Generate a HTML link to the given named route.

echolink_to_route('route.name',$title=null,$parameters=[],$attributes=[]);

link_to_action

Generate a HTML link to the given controller action.

echolink_to_action('HomeController@getIndex',$title=null,$parameters=[],$attributes=[])

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容