Forms & HTML – Laravel – The PHP Framework For Web Artisans

WARNING You’re browsing the documentation for an old version of Laravel. Consider upgrading your project to Laravel 9.x .

Forms & HTML

Opening A Form

Opening A Form

{{

Form

::

open

(

array

(

'

url

'

=>

'

foo/bar

'

)) }}

//

{{

Form

::

close

() }}

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

echo

Form

::

open

(

array

(

'

url

'

=>

'

foo/bar

'

,

'

method

'

=>

'

put

'

))

Note: Since HTML forms only support POST and GET, PUT and DELETE methods will be spoofed by automatically adding a _method hidden field to your form.

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

echo

Form

::

open

(

array

(

'

route

'

=>

'

route.name

'

))

 

echo

Form

::

open

(

array

(

'

action

'

=>

'

[email protected]

'

))

You may pass in route parameters as well:

echo

Form

::

open

(

array

(

'

route

'

=>

array

(

'

route.name

'

,

$user

->id

)))

 

echo

Form

::

open

(

array

(

'

action

'

=>

array

(

'

[email protected]

'

,

$user

->id

)))

If your form is going to accept file uploads, add a files option to your array:

echo

Form

::

open

(

array

(

'

url

'

=>

'

foo/bar

'

,

'

files

'

=>

true

))

CSRF Protection

Adding The CSRF Token To A Form

Laravel provides an easy method of protecting your application from cross-site request forgeries. First, a random token is placed in your user’s session. If you use the Form::open method with POST, PUT or DELETE the CSRF token 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 the token method:

echo

Form

::

token

();

Attaching The CSRF Filter To A Route

Route

::

post

(

'

profile

'

,

array

(

'

before

'

=>

'

csrf

'

,

function

()

{

//

}));

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 the Form::model method:

echo

Form

::

model

(

$user

,

array

(

'

route

'

=>

array

(

'

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 named email, the user model’s email attribute 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:

  1. Session Flash Data (Old Input)
  2. Explicitly Passed Value
  3. 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 using Form::model, be sure to close your form with Form::close!

Labels

Generating A Label Element

echo

Form

::

label

(

'

email

'

,

'

E-Mail Address

'

);

Specifying Extra HTML Attributes

echo

Form

::

label

(

'

email

'

,

'

E-Mail Address

'

,

array

(

'

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

echo

Form

::

text

(

'

username

'

);

Specifying A Default Value

echo

Form

::

text

(

'

email

'

,

'

[email protected]

'

);

Note: The hidden and textarea methods have the same signature as the text method.

Generating A Password Input

echo

Form

::

password

(

'

password

'

);

Generating Other Inputs

echo

Form

::

email

(

$name

,

$value

=

null

,

$attributes

=

array

());

echo

Form

::

file

(

$name

,

$attributes

=

array

());

Checkboxes and Radio Buttons

Generating A Checkbox Or Radio Input

echo

Form

::

checkbox

(

'

name

'

,

'

value

'

);

 

echo

Form

::

radio

(

'

name

'

,

'

value

'

);

Generating A Checkbox Or Radio Input That Is Checked

echo

Form

::

checkbox

(

'

name

'

,

'

value

'

,

true

);

 

echo

Form

::

radio

(

'

name

'

,

'

value

'

,

true

);

Number

Generating A Number Input

echo

Form

::

number

(

'

name

'

,

'

value

'

);

File Input

Generating A File Input

echo

Form

::

file

(

'

image

'

);

Note: The form must have been opened with the files option set to true.

Drop-Down Lists

Generating A Drop-Down List

echo

Form

::

select

(

'

size

'

,

array

(

'

L

'

=>

'

Large

'

,

'

S

'

=>

'

Small

'

));

Generating A Drop-Down List With Selected Default

echo

Form

::

select

(

'

size

'

,

array

(

'

L

'

=>

'

Large

'

,

'

S

'

=>

'

Small

'

),

'

S

'

);

Generating A Grouped List

echo

Form

::

select

(

'

animal

'

,

array

(

'

Cats

'

=>

array

(

'

leopard

'

=>

'

Leopard

'

),

'

Dogs

'

=>

array

(

'

spaniel

'

=>

'

Spaniel

'

),

));

Generating A Drop-Down List With A Range

echo

Form

::

selectRange

(

'

number

'

,

10

,

20

);

Generating A List With Month Names

echo

Form

::

selectMonth

(

'

month

'

);

Buttons

Generating A Submit Button

echo

Form

::

submit

(

'

Click Me!

'

);

Note: Need to create a button element? Try the button method. It has the same signature as submit.

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

'

<input type="awesome">

'

;

});

Now you can call your macro using its name:

Calling A Custom Form Macro

echo

Form

::

myField

();

##Generating URLs

For more information on generating URL’s, check out the documentation on helpers.