مشخصات مقاله
-
1608
-
0.0
-
4984
-
0
-
0
آموزش Facade ها در لاراول
Facade ها
- مقدمه
- استفاده از Facade ها
- مرجع Facade ها
مقدمه
Facade ها به شما اجازه می دهند به صورت Static به سرویس های service container اپلیکیشن خود دسترسی داشته باشید (به عبارت دیگرfacade ها یک interface از نوع static برای (ارث بری) کلاس های موجود در service container فراهم می کنند). در لاراول facade های فراوانی وجود دارد که به یقین قبلا از آن ها در پروژه های خود استفاده کرده اید و فقط با نام یا ساختار آن آشنایی ندارید.
Facade ها به عنوان پروکسی های از نوع static (static proxy) برای دسترسی به کلاس های underlying موجود در service containerایفای نقش می کند. facade ها در واقع روشی برای دسترسی به سرویس های برنامه می باشد که به واسطه ی آن ها می توانید متدهای داخل یک سرویس را به صورت ایستا فراخوانی نمایید. facade ها همچنین کدهای مختصر و صریحی برای این منظور فراهم آورده و در این میان قابلیت آزمایش پذیری و انعطاف پذیری بیشتری نسبت به متدهای static قدیمی به ارمغان می آورند.
استفاده از Facade ها
در یک اپلیکیشن متعارف لاراول، facade یک کلاس است که دسترسی به شی از service container را فراهم می آورد. ابزاری که این امکان را فراهم می کند در کلاس Facade موجود می باشد. Facade ها، حتی facade ای که به صورت اختصاصی ایجاد می کنید، همگی از کلاس پایه یIlluminate\Support\Facades\Facade ارث بری می کنند.
کلاس facade فقط باید یک متد به نام getFacadeAccessor را پیاده سازی کند. این متد مشخص می کند که چه object ای باید از containerگرفته (resolve) شود (به عبارتی اسم سرویسی که باید facade به آن دسترسی داشته باشد را مشخص می کند). کلاس پایه ی Facade از متد__callStatic() برای به تعویق انداختن فراخوانی شی ارائه شده توسط container از facade استفاده می کند.
در واقع این متد به شما امکان می دهد متدهای موجود در سرویس را به صورت static فراخوانی نمایید.
در مثال زیر، سیستم cache لاراول فراخوانی شده است (متد get از سرویس Cache صدا خورده است). در نگاه اول این طور به نظر می رسد که متد استاتیک get در سطح کلاس Cache وجود دارد و فراخوانی می شود:
<?php
namespace App\Http\Controllers;
use Cache;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
$user = Cache::get('user:'.$id);
return view('profile', ['user' => $user]);
}
}
همان طور که می بینید در بالای این فایل با استفاده از دستور use فاساد Cache را در بستر برنامه ی خود وارد (import) می کنیم. این Facadeبه عنوان یک نماینده یا پروکسی برای دسترسی آسان به implementation لایه ی زیرین (underlying) اینترفیسIlluminate\Contracts\Cache\Factory ایفای نقش می کند. تمامی call هایی که با استفاده از facade انجام می گیرد به نمونه ی لایه ی زیرین (underlying instance) از سرویس cache لاراول ارسال می گردد.
حال اگر به کلاسIlluminate\Support\Facades\Cache توجه کنید، می بینید هیچ متدی با نام get که به صورت static تعریف شده باشد وجود ندارد:
class Cache extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'cache'; }
}
facade Cache از کلاس پایه ی Facade ارث بری کرده و متد getFacadeAccessor() را ایجاد می کند. یادآور می شویم که کار این متد بازیابی اسم سرویسی است که facade می خواهد استفاده کند. زمانی که کاربری به یک متد static در فاساد Cache ارجاع (reference) می دهد، لاراول binding سرویس cache را از container گرفته و متد درخواستی (در این مثال get) را برای آن شی اجرا می کند.
مرجع کلاس های Facade
در زیر تمامی facade ها و کلاس های مرتبط با آن را در اختیار شما قرار می دهیم.