در نسخه ی جدید لاراول ویژگی های جدیدی به این فریم ورک قدرتمند و دوست داشتنی اضافه شده است. یکی از آن ویژگی ها Automatic Facades است.
Facade به صورت کلی یک رابط "استاتیک" را به کلاس هایی که در service container در دسترس هستند فراهم می کند.
درنسخه ی جدید لاراول یعنی( laravel 5.4 ) می توانیم خیلی راحت کلاس هایی را که می خواهیم را به صورت Facade استفاده کنیم و تابعی را به راحتی به صورت استاتیک Facade صدا بزنیم .
به مثال زیر دقت کنید:
namespace App;
class Profit
{
public function monthly()
{
...
return $money;
}
}
و هنگام استفاده از این کلاس داریم:
use Facades\App\Profit;
Route::get('/', function () {
return Profit::monthly();
});
تمام Facade های لاراول در فضایی به نام Illuminate \ Support \ Facades تعریف شده است. بنابراین، ما می توانیم به راحتی به یک Facade دسترسی داشته باشیم:
use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
return Cache::get('key');
});
service container Laravel یک ابزار قدرتمند برای مدیریت وابستگی های کلاس و تزریق وابستگی است. تزریق وابستگی اساسا به این صورت تعریف می شود: وابستگی های کلاس به وسیله سازنده یا در بعضی موارد روش های «تنظیم» به کلاس تزریق می شود.
namespace App\Http\Controllers;
use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* The user repository implementation.
*
* @var UserRepository
*/
protected $users;
/**
* Create a new controller instance.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
$user = $this->users->find($id);
return view('user.profile', ['user' => $user]);
}
}
در این مثال UserController ، باید کاربران را از یک منبع داده بازیابی کند. بنابراین، ما یک سرویس را قادر می سازیم که کاربران را بازیابی کند. در این زمینه، UserRepository از Eloquent برای بازیابی اطلاعات کاربر از پایگاه داده استفاده می کند. با این حال، از زمانی که مخزن تزریق می شود، ما می توانیم آن را به راحتی با یک پیاده سازی دیگر مبادله کنیم. همچنین می توانیم با ایجاد UserRepository در هنگام تست برنامه آن را در برنامه پیاده سازی کنیم.
Facades در مقابل تزریق وابستگی
یکی از مزایای اولیه وابستگی تزریق توانایی مبادله پیاده سازی کلاس تزریق شده است. این در حین تست و آزمایش برنامه بسیار مفید و مورد استفاده است، زیرا شما می توانید یک قطعه کد ریز یا کلاسی کوچک تزریق کنید و ادامه ی برنامه را در آن کلاس تعریف نمایید.
ما در واقع می توانیم نمایندگان آن کلاس تزریقی را آزمایش کنیم همانگونه که یک نمونه کلاس تزریقی را آزمایش می کنیم. به عنوان مثال، با توجه به مسیر زیر:
use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
return Cache::get('key');
});
ما می توانیم تست زیر را برای تأیید اینکه روش Cache :: get جوابگو است انجام دهیم:
use Illuminate\Support\Facades\Cache;
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
Cache::shouldReceive('get')
->with('key')
->andReturn('value');
$this->visit('/cache')
->see('value');
}
در یک برنامه Laravel، Facades یک کلاس است که دسترسی به یک شی را از منبع کلاس فراهم می کند. کد ها و دستوراتی که این عمل را انجام می دهند در کلاس Facades قرار دارند. Facades های لاراول . کلاس های سفارشی که شما ايجاد مي کنيد، Base Illuminate \ Support \ Facades \ Facade کلاس را گسترش خواهد داد.
کلاس پایه نماد از روش جادویی () callStatic استفاده می کند تا تماس ها را از Facades خود به شیء منبع منتقل کند. در مثال زیر، یک تماس به سیستم حافظه Laravel ساخته شده است. با نگاه کردن به این کد، می توان فرض کرد که روش استاتیک در کلاس Cache فراخوانی می شود:
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
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]);
}
}
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید