معرفی Laravel Collective

معرفی Laravel Collective

چهارشنبه 22 آذر 1396

Laravel Collective جهت ایجاد فرم های ایمن و سریع در فریم ورک laravel کاربرد دارد به عبارتی پس از آنکه ما این امکان جانبی را نصب نمودیم دیگر نیاز به کدنویسی های پیچیده html برای فرم های خود نداریم و به سادگی می توانیم از طریق داکیومنتی که خود لاراول کالکتیو در اختیار ما قرار می دهد هر عملیاتی را انجام دهیم.

نصب

جهت نصب این پکیج با استفاده از composer ، فایل composer.json پروژه خود را همانند زیر ویرایش نمائید :

composer require "laravelcollective/html":"^5.4.0"

سپس، provider جدید خود را به آرایه providers واقع در config / app.php اضافه کنید:

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

نهایتا دو نام مستعار کلاس را به آرایه aliases واقع در config / app.php اضافه نمایید :

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


ایجاد Form

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

به طور پیش فرض، از روش POST جهت ارسال اطلاعات در فرم استفاده می شود، با این حال، شما می توانید روش دیگری را مشخص کنید:

echo Form::open(['url' => 'foo/bar', 'method' => 'put'])
توجه داشته باشید: از آنجا که فرمهای HTML فقط از POST و GET پشتیبانی می کنند، جهت استفاده از روشهای PUT و DELETE ، بطور اتوماتیک یک فیلد پنهان method_ به فرم شما اضافه می گردد.

جهت ارسال اطلاعات فرم به route و یا action کنترلر همانند زیر عمل می کنیم :

echo Form::open(['route' => 'route.name'])
echo Form::open(['action' => '[email protected]'])

همچنین جهت ارسال پارامتر به route و یا action کنترلر همانند زیر عمل می کنیم:

echo Form::open(['route' => ['route.name', $user->id]])

echo Form::open(['action' => ['[email protected]', $user->id]])

همچنین جهت آپلود و ارسال فایل مانند زیر عمل کنید :

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


استفاده از توکن CSRF در فرم

Laravel روش آسانی برای حفاظت از اپلیکیشن شما در برابر حملات cross-site request forgeries فراهم کرده است. اگر شما از روش Form::open با استفاده از POST، PUT یا DELETE استفاده کنید، نشانه CSRF به صورت خودکار به عنوان فیلد پنهان به فرم شما اضافه می شود. همچنین، اگر شما مایل به ایجاد HTML برای فیلد پنهان CSRF هستید، می توانید از روش token استفاده کنید:

echo Form::token();

افزودن CSRF به Route :

Route::post('profile',
    [
        'before' => 'csrf',
        function()
        {
            //
        }
    ]
);


ایجاد فرم با استفاده از Model

ممکن است بخواهید فرم را بر اساس محتویات یک model پر کنید. برای انجام این کار، از روش Form::model استفاده کنید:

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

زمانیکه که شما یک عنصر در فرم همانند یک text input را تولید می کنید، ، مقدار این text input به صورت خودکار برابر با مقدار نام آیتم موجود در Model تنظیم می گردد. با این حال موارد دیگری نیز وجود دارد. اگر یک آیتم در Session flash data مطابق با نام ورودی وجود داشته باشد، بر روی مقدار مدل اولویت خواهد داشت. بنابراین ترتیب اولویت ها بدین صورت است :

  1. Session Flash Data (Old Input)
  2. Explicitly Passed Value
  3. Model Attribute Data

این امر به شما اجازه می دهد تا سریعا فرم هایی را ایجاد کنید که نه تنها به مقادیر model پیوند دارند، بلکه اگر خطای اعتبارسنجی روی سرور وجود داشته باشد، به راحتی مقادیر فرم دوباره پر شود!

توجه: هنگام استفاده از Form :: model، باید فرم خود را با Form::close ببندید!


بررسی Form Model Accessors

Eloquent Accessor در Laravel اجازه می دهد ویژگی model را تا قبل از بازگشت دستکاری کنید. برای مثال، برای تعیین فرمت های تاریخ جهانی، این می تواند بسیار مفید باشد. با این حال، فرمت تاریخ مورد استفاده برای نمایش ممکن است با قالب تاریخی مورد استفاده برای عناصر فرم سازگار نباشد. شما می توانید این را با ایجاد دو دسترسی جداگانه حل کنید: یک دسترسی استاندارد و یا یک فرم دسترسی.

برای تعریف دسترسی به فرم، یک متد formFooAttribute را در model خود ایجاد کنید که در آن Foo نام ستونی است که میخواهید به آن دسترسی پیدا کنید.

در این مثال، یک accessor برای ویژگی date_of_birth تعریف می کنیم. زمانیکه ()Form::model جهت پر کردن فرم استفاده شود، Accessor به صورت خودکار توسط ایجاد کننده فرم فراخوانی می گردد.

شما باید با استفاده از روش trait کلاس FormAccessible را به model خود include نمایید.

<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Collective\Html\Eloquent\FormAccessible;

class User extends Model
{
    use FormAccessible;     

    /**
     * Get the user's first name.
     *
     * @param  string  $value
     * @return string
     */
    public function getDateOfBirthAttribute($value)
    {
        return Carbon::parse($value)->format('m/d/Y');
    }

    /**
     * Get the user's first name for forms.
     *
     * @param  string  $value
     * @return string
     */
    public function formDateOfBirthAttribute($value)
    {
        return Carbon::parse($value)->format('Y-m-d');
    }
}


ایجاد Label در فرم

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

تعیین ویژگی های HTML در Label :

echo Form::label('email', 'E-Mail Address', ['class' => 'awesome']);
نکته: پس از ایجاد یک Label، هر عنصر فرم که با نامی مطابق با نام Label ایجاد می کند، به طور خودکار یک شناسه مطابق با نام Label نیز دریافت می کند.

ایجاد Text Input

echo Form::text('username');

تعیین یک مقدار پیش فرض در Text Input :

echo Form::text('email', '[email protected]');


ایجاد Password Input

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


ایجاد Input های Email و File

echo Form::email('name', $value = null, $attributes = []);
echo Form::file('name', $attributes = []);


ایجاد Checkbox و Radio Input

echo Form::checkbox('name', 'value');

echo Form::radio('name', 'value');

Checkbox Or Radio Input که ویژگی تیک خورده اند :

echo Form::checkbox('name', 'value', true);

echo Form::radio('name', 'value', true);


ایجاد Number Input

echo Form::number('name', 'value');


ایجاد Date Input

echo Form::date('name', \Carbon\Carbon::now());


ایجاد File Input

echo Form::file('image');
نکته: خاصیت files باید در هنگام ایجاد فرم برابر true باشد


ایجاد Drop-Down List

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

ایجاد Drop-Down List با گزینه انتخاب شده پیش فرض :

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

ایجاد Drop-Down List همراه با placeholder :

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

در زیر نحوه ایجاد Grouped List را مشاهده می کنید :

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

ایجاد Grouped List با یک رنج عددی :

echo Form::selectRange('number', 10, 20);


ایجاد List با یک Month Names :

echo Form::selectMonth('month');


ایجاد Submit Button

echo Form::submit('Click Me!');


ایجاد Form Macro

به Form class helpers شخصی، اصطلاحا macro گفته می شود.

جهت ایجاد Macro همانند زیر عمل می کنیم :

Form::macro('myField', function()
{
    return '<input type="awesome">';
});

هم اکنون با استفاده از نام Macro می توانیم آنرا فراخوانی کنیم :

echo Form::myField();


ایجاد Custom Component

component شبیه macro های سفارشی می باشند با این تفاوت که در ماکروها خروجی مستقیما تگ های HTML است ولی در کامپوننت محتوای موجود در قالب Laravel Blade Templates می باشد

جهت ثبت یک کامپوننت از روش زیر استفاده می کنیم

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

برای مثال فرض کنید یک view مانند زیر داشته باشیم :

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

آنگاه جهت ثبت آن بصورت component خواهیم داشت :

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

و برای فراخوانی components ثبت شده :

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

که خروجی آن HTML موجود در view مشخص شده می باشد :

<div class="form-group">
    <label for="first_name">First Name</label>
    <input type="text" name="first_name" value="" class="form-control">
</div>


ایجاد URLs

ایجاد یک لینک به یک آدرس URL مشخص :

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

ایجاد یک لینک برای اتصل به یک asset :

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

ایجاد لینک به یک route :

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

ایجاد لینک به یک controller action :

echo link_to_action('[email protected]', $title = null, $parameters = [], $attributes = []);

منابع مورد مطالعه جهت جمع آوری این مطلب:
https://laravelcollective.com/docs/5.4/html

نظرات