gparvin.co@gmail.com 017 3358 0503
بهترین نکات و تمرین های لاراول 5.7

بهترین نکات و تمرین های لاراول 5.7

ارسال شده در تاریخ : ۲۰ مهر ۹۸

لاراول توسط بسیاری از برنامه نویسان php به خاطر ویژگی هایی مانند نوشتن کد های تمیز، اشکال زدایی قوی، کارایی بالا و ... شناخته شده است. همچنین لاراول دارای ویژگی های بسیاری می باشد که ممکن است در مستنداتش ذکر نشده باشد.

من 2 سال از که از لاراول در پروژه هام استفاده می کنم و در حال حاضر کد نویسی من نسبت به اوایل کار بسیار تغییر کرده و بهبود یافته است. من قصد دارم تا برخی از ترفند ها و نکات مفید در هنگام کد نویسی لاراول را با شما به اشتراک بگذارم.

 

از local scopes استفاده کنید

لاراول یک روش خوب برای نوشته کوئری های مربوط به دیتابیس دارد به نام Query Builder، به عنوان مثال :

$orders = Order::where('status', 'delivered')->where('paid', true)->get();

این ابزار خیلی خوبه و باعث شده از نوشتن کوئری های پیچیده راحت بشیم. اما می توانیم با اسفتاده از local scopes این کد را بهتر کنیم.

اسفتاده از local scopes این امکان را ایجاد می کنم که ما توابع کوئری خودمان را بسازیم و با ترکیب آنها داده های مورد نظر خود را از دیتابیس واکشی کنیم. به عنوان مثال به جای استفاده از ->where() می توانیم از ->delivered() و ->paid() اسفتاده کنیم.

برای این کار در مدل Order باید این کدها را اضافه کنیم:

class Order extends Model
{
   ...
   public function scopeDelivered($query) {
      return $query->where('status', 'delivered');
   }
   public function scopePaid($query) {
      return $query->where('paid', true);
   }
}

برای تعریف local scope تابعی با نام scope[Something] ایجاد کنید، با این ساختار نام گذاری لاراول این تابع را به عنوان local scope شناسایی می کند و از آن در ساختن کوئری ها استفاده می کند. در هنگام ایجاد این توابع به پارامتر $query دقت کنید.

با اضافه کردن این دو تابه به مدل Order حالا می توانید کوئری قبلی را به این صورت تغییر دهید:

$orders = Order::delivered()->paid()->get();

برای راحتی بیشتر شما می توانید local scope خود را به صورت پویا تعریف کنید که این اجازه را به شما می دهد تا از پارامترهای دیگر هم اسفتاده کنید: 

class Order extends Model
{
   ...
   public function scopeStatus($query, string $status) {
      return $query->where('status', $status);
   }
}
$orders = Order::status('delivered')->paid()->get();

در ادامه این مقاله شما یاد میگیرد که چرا باید از snake_case برای فیلدهای پایگاه داده استفاده کنید، اما در اینجا به اولین دلیل اشاره میکنم: لاراول به صورت پیشفرض از where[Something] برای جستجو در فیلد something استفاده می کند، بنابراین شما می توانید از این کد به جای کد قبل استفاده کنید :

Order::whereStatus('delivered')->paid()->get();

اگر شما فیلد status در جدول مروبطه در پایگاه داده خود داشته باشد، لاراول آن را جستجو خواهد کرد و یا اگر شما فیلدی به نام shipping_status در جدول پایگاه داده داشته باشید می توانید از این دستور استفاده کنید :

Order::whereShippingStatus('delivered')->paid()->get();

 

از فایل های Request در صورت نیاز استفاده کنید

لاراول برای اعتبار سنجی فرم های شما یک راه بسیار عالی دارد و شما می توانید به راحتی از آن استفاده کنید. به عنوان مثال :

public function store(Request $request)
{
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // The blog post is valid...
}

اما زمانی که شما پارامتر های زیادی برای اعتبار سنجی دارید و یا کدهای زیادی در کنترلر خود نوشتید این کار ممکن است مقداری آزاردهنده باشد. اگر شما می خواهید که کدهای نوشته شده در کنترلرهای خود را به حداقل برسانید لاراول یک راه حل بسیار عالی برای شما دارد.

شما می توانید با ایجاد کلاس های Request شخصی سازی شده درخواست های کاربران را اعتبار سنجی کنید، برای این کار می توانید از دستور زیر اسفتاده کنید :

php artisan make:request StoreBlogPost

با اجرای این دستور در مسیر app/Http/Requests/ کلاس StoreBlogPost ایجاد می شود:

class StoreBlogPostRequest extends FormRequest
{
   public function authorize()
   {
      return $this->user()->can('create.posts');
   }
   public function rules()
   {
       return [
         'title' => 'required|unique:posts|max:255',
         'body' => 'required',
       ];
   }
}

حالا به جای استفاده از کلاس Illuminate\Http\Request در کنترلر خود از کلاسی که ایجاد کرده اید استفاده کنید:

use App\Http\Requests\StoreBlogPostRequest;
public function store(StoreBlogPostRequest $request)
{
    // The blog post is valid...
}

خروجی متد authorize یک مقدار boolean می باشد که true یا false است که در صورت false بودن خطای 403 به کاربر نمایش داده خواهد شد.

 

در حال بروز رسانی ...

تمامی حقوق این وبسایت متعلق به شرکت گلستان پردازش آروین می باشد.
© 2019 All Rights Reserved.