بایگانی برچسب: s

مفهموم و کاربرد Facade در لاراول

نوشته‌شده در توسط .
آموزش لاراول

با سلام مجدد ، حتما اگه با لاراول کار کرده باشید ، بارها اسم facade به گوشتون خورده. اما facade واقعا چیه؟ طبق گفته ی سایت خود لاراول ” فساد یک ظاهر استاتیک رو برای کلاسهایی که در کانتینر وجود دارن ایجاد میکنه” در مورد IOC container قبلا توی این پست صحبت کردم . حتما در مورد کلاسهای استاتیک هم اطلاع دارید دیگه و قبلا در این باره هم اینجا حرف زدم…

لاراول خودش کلی فساد! داره که شما بدون اینکه شاید متوجه بشید دارید ازشون استفاده میکنید. مثلا همین Session یا Form و… که استفاده میکنید همگی فساد هستند… لیست کامل فسادهای لاراول رو میتونید اینجا ببینید. از اونجایی که من خودم با لاراول ۵ کار میکنم لینک هایی که به داکیومنت لاراول میدم هم به ورژن ۵ هست و شما میتونید اون بالا سمت راست ، روی ورژن دلخواهتون سوئیچ کنید که البته توی این مورد تفاوت خاصی ندارن… شما میتونید توی لاراول فساد دلخواهتون رو تعریف و استفاده کنید و بعضی جاها کارتون رو خیلی جلو میندازه و البته نشان از حرفه ای بودن شما هم هست این کار… قبل از اینکه بپردازید به ساخت فساد برید و در مورد کانتینر لاراول اطلاعات کامل رو بدست بیارید.

ساخت یک فساد – facade دلخواه در لاراول

هر فسادی که شما میسازید توی لاراول ، باید از کلاس پایه ی Facade  مشتق شده باشن و حتما باید متد  getFacadeAccessor  رو ایمپلیمنت کنید ، توی این متد شما به لاراول میگید که وقتی این فساد رو صدا زدم ، کدوم کلاس که توی کانتینر هست رو لود کنه… کلاس پایه ی Facade  از متد جادویی  __callStatic()  برای این کار استفاده میکنه. بعد از ساخت یک فساد به راحتی میتونید به روش زیر به فساد متد مورد نظرتون دسترسی پیدا کنید :

برای ساخت یک فساد سه تا کار رو باید انجام بدید :

اولین کاری که باید بکنید اینه که کلاس مورد نظرتون رو توی سرویس کانتینر بایند کنید . همونطور که گفتم قبلا در مورد این موضوع مطلبی نوشتم و میتونید توی خود داکیومنت لاراول هم در بارش بخونید . فرض کنید که یه کلاس مثل کلاس زیر رو داریم و میخوایم بصورت استاتیک و فسادگونه! ازش استفاده کنیم :

قدم اول این بود که این کلاس رو در کانتینر بایند کنیم ، بصورت زیر :

بهترین جا هم برای این کار همونطور که میدونید متد register  یک service provider هست که من اسمش رو میذارم PaymentServiceProvider .

قدم دوم : حالا میتونید کلاس فسادتون رو بسازید

قدم سوم

اینه که فساد رو به لاراول معرفی کنید ، برای این کار باید توی config/app.php  یک نام اختصاری برای فساد خودتون بذارید :

حالا به راحتی میتونید به روش آشنای زیر به متد های کلاستون دسترسی داشته باشید :

در نهایت لیست کلی فساد های لاراول که از لارابوک کپی کردم 🙂

فاساد نام سرویس مشخصه سرویس
App Illuminate\Foundation\Application app
Artisan Illuminate\Console\Application artisan
Auth Illuminate\Auth\AuthManager auth
Auth (Instance) Illuminate\Auth\Guard
Blade Illuminate\View\Compilers\BladeCompiler blade.compiler
Bus Illuminate\Contracts\Bus\Dispatcher
Cache Illuminate\Cache\CacheManager cache
Config Illuminate\Config\Repository config
Cookie Illuminate\Cookie\CookieJar cookie
Crypt Illuminate\Encryption\Encrypter encrypter
DB Illuminate\Database\DatabaseManager db
DB (Instance) Illuminate\Database\Connection
Event Illuminate\Events\Dispatcher events
File Illuminate\Filesystem\Filesystem files
Hash Illuminate\Contracts\Hashing\Hasher hash
Input Illuminate\Http\Request request
Lang Illuminate\Translation\Translator translator
Log Illuminate\Log\Writer log
Mail Illuminate\Mail\Mailer mailer
Password Illuminate\Auth\Passwords\PasswordBroker auth.password
Queue Illuminate\Queue\QueueManager queue
Queue (Instance) Illuminate\Queue\QueueInterface
Queue (Base Class) Illuminate\Queue\Queue
Redirect Illuminate\Routing\Redirector redirect
Redis Illuminate\Redis\Database redis
Request Illuminate\Http\Request request
Response Illuminate\Contracts\Routing\ResponseFactory
Route Illuminate\Routing\Router router
Schema Illuminate\Database\Schema\Blueprint
Session Illuminate\Session\SessionManager session
Session (Instance) Illuminate\Session\Store
Storage Illuminate\Contracts\Filesystem\Factory filesystem
URL Illuminate\Routing\UrlGenerator url
Validator Illuminate\Validation\Factory validator
Validator (Instance) Illuminate\Validation\Validator
View Illuminate\View\Factory view
View (Instance) Illuminate\View\View

 

موفق باشید 🙂

پراپرتی و متدهای استاتیک در php

نوشته‌شده در توسط .

قبل از اینکه بخوام در مورد facade  در لاراول صحبت کنم باید اطلاعات کلی در مورد توابع یا متدهای استاتیک php داشته باشید. متدهای استاتیک متدهایی از یک کلاس هستند که بدون نمونه گیری از کلاس و بصورت استاتیک قابل دسترسی هستند. یعنی بدون داشتن شئ از کلاس ، میتونیم از این نوع متدها استفاده کنیم.

قبل از مثال در مورد متدهای استاتیک میخوام کمی در مورد متغیرها یا پراپرتی های استاتیک صحبت کنم. یک پراپرتی استاتیک بدون استفاده از $this  و به راحتی با استفاده از ::  قابل دسترسی هست. همچنین میتونید یک متغیر استاتیک رو با استفاده از کلمه کلیدی static  تعریف کنید. به مثال زیر توجه کنید :

میبینید که چقدر راحت میشه به پراپرتی های استاتیک دسترسی داشت. با استفاده از کلمه های کلیدی self  و parent  هم میتونید به پراپرتی های این کلاس و یا کلاس پدر دسترسی داشته باشید.

نحوه ی تعریف متدهای استاتیک

همونطور که در بالا میبینید متد start()  بصورت استاتیک تعریف شده و خیلی شیک و مجلسی میشه ازش نمونه ساخت. این نوع توابع در نگاه اول خیلی جالب به نظر میرسن… و سوالی که پیش میاد اینه که چرا همه متد هارو استاتیک تعریف نمیکنیم؟ 

متدهای استاتیک با اینکه اولش خیلی باحال به نظر میرسن ولی محدودیتی دارن که تنها در بعضی موارد میتونیم ازشون استفاده کنیم : “بخاطر استاتیک تعریف شدن این متدها ، امکان استفاده از $this  در این نوع متدها وجود ندارد.” ولی در مجموع این نوع متدهای خیلی پرکاربرذ هستند.