12/08/2018, 15:10

Tìm hiểu về Laravel Collective: Form/Html

HTML Collective là một package hỗ trợ cho Laravel dùng để xây dựng các Form HTML. Để sử dụng Laravel Collective bạn chạy câu lệnh terminal sau: composer require laravelcollective/html Thêm Provider và Aliases vào file config/app.php: // ... 'providers' => [ // ... ...

HTML Collective là một package hỗ trợ cho Laravel dùng để xây dựng các Form HTML. Để sử dụng Laravel Collective bạn chạy câu lệnh terminal sau: composer require laravelcollective/html Thêm Provider và Aliases vào file config/app.php:

    // ...
    'providers' => [
        // ...
        CollectiveHtmlHtmlServiceProvider::class,
        // ...
    ],
    // ...
    'aliases' => [
        // ...
        'Form' => CollectiveHtmlFormFacade::class,
        'Html' => CollectiveHtmlHtmlFacade::class,
        // ...
    ],
    // ...

1. Mở đóng thẻ form html:

{!! Form::open(['method' => 'POST', 'url' => 'foobar']) !!}
    //
{!! Form::close() !!}

Đoạn code trên generate ra HTML như sau:

Ngoài ra, bạn có thể sử dụng routes đã được định nghĩa hoặc controller@action để binding ra action của thẻ form HTML:

Form::open(['method' => 'POST', 'action' => 'HomeController@fooBar'])

Form::open(['method' => 'POST', 'routes' => 'home.foobar'])

2. Truyền biến qua form:

Form::open(['method' => 'POST', 'url' => "foobar/$id"])

Form::open(['method' => 'POST', 'action' => ['HomeController@fooBar', 'id' => $id]])

Form::open(['method' => 'POST', 'routes' => ['home.foobar', 'id' => $id]])

Nếu form cho phép upload files thì thêm option files:

Form::open(['method' => 'POST', 'url' => 'foobar', 'files' => true])

3. Generate các thẻ HTML input(text, textarea, radio, select, checkbox):

    // Generating A Label Element
    Form::label('email', 'E-Mail Address')
    <label for="email">E-Mail Address</label>
    
    
    // Generating A Text Input
    Form::text('username')
    <input name="username" type="text">
    
    Form::text('username', 'tieppt')
    <input name="username" type="text" value="tieppt">
    
    // Generating A Hidden Input
    Form::hidden('username')
    <input name="username" type="hidden">
    
    
    // Generating A Password Input
    Form::password('password', ['class' => 'awesome'])
    <input name="password" type="password" value="" class="awesome">
    
    
    // Generating A Email Input
    Form::email('email')
    <input name="email" type="email" value>
    
    Form::text('email', 'example@gmail.com')
    <input name="email" type="email" value="example@gmail.com">
    
    // Generating A File Input
    Form::file('file') 
    <input name="file" type="file">
    
    
    // Generating A Checkbox Input
    Form::checkbox('hobbies', 'value')
    <input name="hobbies" type="checkbox" value="value">
    
    Form::checkbox('hobbies', 'value', true)
    <input checked="checked" name="hobbies" type="checkbox" value="value">
    
    
    // Generating A Radio Input
    Form::radio('name', 'value')
    <input name="role" type="radio" value="value">
    
    Form::radio('name', 'value', true)
    <input checked="checked" name="role" type="radio" value="value">
    
    
    // Generating A Number Input
    Form::number('number', 1)
    <input name="number" type="number" value="1">
    
    
    // Generating A Date Input
    Form::date('dob', CarbonCarbon::now())
    <input name="dob" type="date" value="2017-04-23">
    
    
    // Generating A Select Options
    Form::select('size', ['L' => 'Large', 'S' => 'Small'])
    <select name="size">
        <option value="L">Large</option>
        <option value="S">Small</option>
    </select>
    
    
    // Generating A Checkboxes
    Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, ['multiple' => true])
    <select multiple="multiple" name="size">
        <option value="L">Large</option>
        <option value="S">Small</option>
    </select>
    
    // Generating A Grouped List
    {!! Form::select('animal',[
        'Cats' => ['leopard' => 'Leopard'],
        'Dogs' => ['spaniel' => 'Spaniel'],
    ]) !!}
    <select name="animal">
        <optgroup label="Cats">
            <option value="leopard">Leopard</option>
        </optgroup>
        <optgroup label="Dogs">
            <option value="spaniel">Spaniel</option>
        </optgroup>
    </select>
    
    
    // Generating A Drop-Down List With A Range
    Form::selectRange('number', 10, 15)
    <select name="number">
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
        <option value="13">13</option>
        <option value="14">14</option>
        <option value="15">15</option>
    </select>
    
    
    // Generating A List With Month Names
    Form::selectMonth('month')
    <select name="month">
        <option value="1">January</option>
        <option value="2">February</option>
        <option value="3">March</option>
        <option value="4">April</option>
        <option value="5">May</option>
        <option value="6">June</option>
        <option value="7">July</option>
        <option value="8">August</option>
        <option value="9">September</option>
        <option value="10">October</option>
        <option value="11">November</option>
        <option value="12">December</option>
    </select>
    
    //Generating A Button
    Form::submit('Click Me!')
    <input type="submit" value="Click Me!">
    
     Form::reset('Click Me!')
    <input type="reset" value="Click Me!">
    
     Form::button('Click Me!')
    <button type="button">Click Me!</button>

4. Binding dữ liệu vào form:

{!! Form::open(['method' => 'PATCH', 'route' => ['users.update', $user->id]]) !!}
    {!! Form::text('name', $user->name) !!}
    {!! Form::text('email', $user->email) !!}
{!! Form::close() !!}

// Bind dữ liệu bằng form model. Các attributes value của thẻ input sẽ tự động match với các value của key tương ứng trong model $user
{!! Form::model($user, ['method' => 'PATCH', 'route' => ['users.update', $user->id]]) !!}
    {!! Form::text('name') !!}
    {!! Form::text('email') !!}
{!! Form::close() !!}

Kết quả:

5. 1 số truờng hợp binding dữ liệu cụ thể

Selected option khi hiển thị dữ liệu

Form::select('size', ['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], 'S')
// Kết quả
<select name="size">
    <option value="L">Large</option>
    <option value="S" selected>Small</option>
</select>

Form::select('size', ['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => true])
// Kết quả
<select multiple="multiple" name="size">
    <option value="L">Large</option>
    <option value="M" selected="selected">Medium</option>
    <option value="S" selected="selected">Small</option>
</select>

Checked checkboxes:

Form::checkbox('hobbies', 'value', true)
// Kết quả
<input checked="checked" name="hobbies" type="checkbox" value="value">

$sizes = ['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'];
$checkedSizes =  ['L' => 'Large', 'S' => 'Small'];
@foreach ($sizes as $size)
    Form::checkbox('checkbox', $size, in_array($size, $checkedSizes))
@endforeach
// Kết quả
<input name="checkbox" type="checkbox" value="Large" checked="checked">
<input name="checkbox" type="checkbox" value="Medium">
<input name="checkbox" type="checkbox" value="Small" checked="checked">

Form model hiển thị

Form::model($user, ['route' => ['users.update', $user->id]])
    Form::email('email')
    Form::text('username')
    Form::password('password')
Form::close()
// Các attributes value của thẻ input sẽ tự động match với các value của key tương ứng trong model $user
// Kết quả
<form method="POST" action="http://localhost:8888/users/1" accept-charset="UTF-8">
    <input name="email" type="email" value="admin@tieppt.com" id="email">
    <input name="username" type="text" value="admin">
    <input name="password" type="password" value="">
</form>
0