美文网首页
laravelcollective5.3 Forms &

laravelcollective5.3 Forms &

作者: 脑子 | 来源:发表于2017-02-04 02:15 被阅读216次

    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=[])

    相关文章

      网友评论

          本文标题:laravelcollective5.3 Forms &

          本文链接:https://www.haomeiwen.com/subject/vqrjittx.html