کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Facade ها در لاراول

Facade ها

  1. مقدمه
  2. استفاده از Facade ها
  3. مرجع 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 ها و کلاس های مرتبط با آن را در اختیار شما قرار می دهیم.

Service Container Binding
Class
Facade
app
Illuminate\Foundation\Application
App
artisan
Illuminate\Contracts\Console\Kernel
Artisan
auth
Illuminate\Auth\AuthManager
Auth
auth
Illuminate\Auth\AuthManager
Auth
blade.compiler
Illuminate\View\Compilers\BladeCompiler
Blade
Illuminate\Contracts\Bus\Dispatcher
Bus
cache
Illuminate\Cache\Repository
Cache
config
Illuminate\Config\Repository
Config
cookie
Illuminate\Cookie\CookieJar
Cookie
encrypter
Illuminate\Encryption\Encrypter
Crypt
db
Illuminate\Database\DatabaseManager
DB
Illuminate\Database\Connection
DB (Instance)
events
Illuminate\Events\Dispatcher
Event
files
Illuminate\Filesystem\Filesystem
File
Illuminate\Contracts\Auth\Access\Gate
Gate
hash
Illuminate\Contracts\Hashing\Hasher
Hash
translator
Illuminate\Translation\Translator
Lang
log
Illuminate\Log\Writer
Log
mailer
Illuminate\Mail\Mailer
Mail
auth.password
Illuminate\Auth\Passwords\PasswordBroker
Password
queue
Illuminate\Queue\QueueManager
Queue
queue
Illuminate\Contracts\Queue\Queue
Queue (Instance)
Illuminate\Queue\Queue
Queue (Base Class)
redirect
Illuminate\Routing\Redirector
Redirect
redis
Illuminate\Redis\Database
Redis
request
Illuminate\Http\Request
Request
Illuminate\Contracts\Routing\ResponseFactory
Response
router
Illuminate\Routing\Router
Route
Illuminate\Database\Schema\Blueprint
Schema
session
Illuminate\Session\SessionManager
Session
Illuminate\Session\Store
Session (Instance)
filesystem
Illuminate\Contracts\Filesystem\Factory
Storage
url
Illuminate\Routing\UrlGenerator
URL
validator
Illuminate\Validation\Factory
Validator
Illuminate\Validation\Validator
Validator (Instance)
view
Illuminate\View\Factory
View
Illuminate\View\View
View (Instance)
1395/02/22 4986 1609
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...