در روت هایی که از یک کنترلر یکسان استفاده میشود، به جای استفاده از کنترلر در هر روت میتوانید طبق تصویر بالا عمل کنید و روتهای مورد نظر را گروهبندی کنید
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍5🔥4👎1
🔻بهبود کارایی اپهای لاراولی
- قسمت اول
🔸 ۱. کش کردن کانفیگها
لاراول دستور کش کردن کانفیگ ها را ارائه میدهد که باعث بهبود عملکرد برنامه میشود، که با دستور زیر قابل انجام است:
اگر میخواهید کش را تازهسازی کنید میتوانید دستور بالا را دوباره اجرا کنید.
برای پاک کردن کش هم میتوانید از دستور زیر استفاده کنید:
🔸 ۲. کش کردن روتها
کش کردن روتها، یک قابلیت مهم برای افزایش کارایی برنامه شماست، بهویژه برای برنامههایی که دارای روتها و کانفیگ های فراوانی هستند.
و به کمک دستور زیر قابل انجام است:
برای پاک کردن کش روت ها هم میتوانید از دستور زیر استفاده کنید:
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
- قسمت اول
🔸 ۱. کش کردن کانفیگها
لاراول دستور کش کردن کانفیگ ها را ارائه میدهد که باعث بهبود عملکرد برنامه میشود، که با دستور زیر قابل انجام است:
php artisan config:cache
زمانی که این دستور را اجرا کنید، هرتغییری که ایجاد کنید هیچ تاثیری نخواهد داشت.اگر میخواهید کش را تازهسازی کنید میتوانید دستور بالا را دوباره اجرا کنید.
برای پاک کردن کش هم میتوانید از دستور زیر استفاده کنید:
php artisan config:clear
همچنین میتوانید به کمک OPcache، که کد های PHP را کش میکند، کارایی برنامه خود را افزایش دهید.🔸 ۲. کش کردن روتها
کش کردن روتها، یک قابلیت مهم برای افزایش کارایی برنامه شماست، بهویژه برای برنامههایی که دارای روتها و کانفیگ های فراوانی هستند.
و به کمک دستور زیر قابل انجام است:
php artisan route:cache
( توجه داشته باشید که هربار تغییری در روتها و کانفیگها ایجاد کنید، باید دستور بالا را دوباره اجرا کنید )برای پاک کردن کش روت ها هم میتوانید از دستور زیر استفاده کنید:
php artisan route:clear
#Performance #Tip👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥4👍1👎1
🔻بهبود کارایی اپهای لاراولی
- قسمت دوم
🔸 ۳. حذف سرویس های استفاده نشده
هنگامی که پروژه لاراولی خود را اجرا میکنید، لاراول بهصورت خودکار تعداد زیادی از Service Provider های لیست شده در
امّا معمولا شما به سرویس هایی مانند View Service یا Session Service نیاز ندارید، برای همین بسیاری از توسعهدهندگان تنظیمات پیشفرض لاراول را دنبال نمیکنند.
بنابراین، شما باید سرویس های غیرضروری را برای بهینهسازی کارایی لاراول غیرفعال کنید.
🔸 ۴. بهینهسازی Classmap
لاراول، برای ایجاد درخواستها چندین و چند فایل را فراخوانی میکند، بهطوری که حتی یک برنامه ساده لاراولی هم شامل فایل های زیادی خواهد بود.
یک ترفند ساده، میتواند این باشد که بیاییم و تمام فایل های اینکلود شده را درون یک فایل ترکیب کنیم. بدین ترتیب یک فایل فراخوانی و لود خواهد شد. برای انجام این کار، میتوانیم از دستور زیر کمک بگیریم:
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
- قسمت دوم
🔸 ۳. حذف سرویس های استفاده نشده
هنگامی که پروژه لاراولی خود را اجرا میکنید، لاراول بهصورت خودکار تعداد زیادی از Service Provider های لیست شده در
config/app.php
را فراخوانی میکند تا به شما در طول توسعه پروژه، کمک کند.امّا معمولا شما به سرویس هایی مانند View Service یا Session Service نیاز ندارید، برای همین بسیاری از توسعهدهندگان تنظیمات پیشفرض لاراول را دنبال نمیکنند.
بنابراین، شما باید سرویس های غیرضروری را برای بهینهسازی کارایی لاراول غیرفعال کنید.
🔸 ۴. بهینهسازی Classmap
لاراول، برای ایجاد درخواستها چندین و چند فایل را فراخوانی میکند، بهطوری که حتی یک برنامه ساده لاراولی هم شامل فایل های زیادی خواهد بود.
یک ترفند ساده، میتواند این باشد که بیاییم و تمام فایل های اینکلود شده را درون یک فایل ترکیب کنیم. بدین ترتیب یک فایل فراخوانی و لود خواهد شد. برای انجام این کار، میتوانیم از دستور زیر کمک بگیریم:
php artisan optimize --force
#Performance #Tip👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥3👍2👎1
🔻بهبود کارایی اپهای لاراولی
- قسمت سوم
🔸 ۵. بهینهسازی Composer
لاراول از ابزاری جدا بهنام کامپوزر استفاده میکند تا بر وابستگیها و پکیجهای مختلف نظارت کند، پس از نصب کامپوزر، بهصورت پیشفرض یک سری پکیجهایی مخصوص توسعه را فراخوانی خواهد کرد. این پکیجها فقط در طول توسعه مفید هستند و هنگامی که سایت شما بهصورت کامل نهایی شده است، دیگر به این پکیج ها نیاز نخواهیم داشت و فقط باعث کند شدن سایت میشود.
برای بهینه کردن عملکرد لاراول، بهترین راه ذخیره قسمت کشها و سشن ها در رم است. به این منظور میتوانید از Memcached کمک بگیرید که جز سریع ترین درایور های کش و سشن، برای بهبود کارایی لاراول است.
#Performance #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
- قسمت سوم
🔸 ۵. بهینهسازی Composer
لاراول از ابزاری جدا بهنام کامپوزر استفاده میکند تا بر وابستگیها و پکیجهای مختلف نظارت کند، پس از نصب کامپوزر، بهصورت پیشفرض یک سری پکیجهایی مخصوص توسعه را فراخوانی خواهد کرد. این پکیجها فقط در طول توسعه مفید هستند و هنگامی که سایت شما بهصورت کامل نهایی شده است، دیگر به این پکیج ها نیاز نخواهیم داشت و فقط باعث کند شدن سایت میشود.
composer install --prefer-dist --no-dev -o
🔸 ۶. استفاده از یک Cache و Session درایور سریعبرای بهینه کردن عملکرد لاراول، بهترین راه ذخیره قسمت کشها و سشن ها در رم است. به این منظور میتوانید از Memcached کمک بگیرید که جز سریع ترین درایور های کش و سشن، برای بهبود کارایی لاراول است.
#Performance #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥4👎2❤1
🔻بهبود کارایی اپهای لاراولی
- قسمت چهارم
🔸 ۷. کش کردن نتایج کوئریها
کش کردن نتایج کوئریهایی که مکرراً تکرار میشوند یک راهحل فوقالعاده برای افزایش کارایی لاراول است. برای این کار، من استفاده از تابع remember را پیشنهاد میدهم، که به صورت زیر قابل استفاده است:
لاراول، Eloquent را که یک ORM عالی برای تعامل با دیتابیسها است را ارائه میدهد.
زمانی که الاکوئنت از Eager Loading استفاده میکند، فقط اطلاعاتی که نیاز داریم را دریافت میکنیم و به مشکلاتی از قبیل خطای N+1 برنمیخوریم و کوئری اضافهای اجرا نخواهد شد.
بهعنوان مثال:
#Performance #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
- قسمت چهارم
🔸 ۷. کش کردن نتایج کوئریها
کش کردن نتایج کوئریهایی که مکرراً تکرار میشوند یک راهحل فوقالعاده برای افزایش کارایی لاراول است. برای این کار، من استفاده از تابع remember را پیشنهاد میدهم، که به صورت زیر قابل استفاده است:
$posts = Cache::remember('index.posts', 30, function()🔸 ۸. استفاده از "Eager Loading" برای دادهها
{
return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
لاراول، Eloquent را که یک ORM عالی برای تعامل با دیتابیسها است را ارائه میدهد.
زمانی که الاکوئنت از Eager Loading استفاده میکند، فقط اطلاعاتی که نیاز داریم را دریافت میکنیم و به مشکلاتی از قبیل خطای N+1 برنمیخوریم و کوئری اضافهای اجرا نخواهد شد.
بهعنوان مثال:
$books = App\Book::with('author')->get();دراینجا لاراول از آنجایی که از معماری ORM استفاده میکند، تنها دو کوئری دریافت میکند.
foreach ($books as $book) {
echo $book->author->name;
}
#Performance #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥5👎2
همهی ما میدانیم برای اینکه اپ لاراولی خود را درحالت «تعمیر» قرار دهیم (maintenance mode) ، تنها کافیست دستور زیر را اجرا کنیم:
حالا فرض کنید که ما نیاز داریم فقط خودمان به اپ دسترسی داشته باشیم، یا فقط افراد خاصی به اپ دسترسی داشته باشند. درهمچین موقعیتی میتوانیم از نشانه
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
php artisan downبا اجرای این دستور، هرکسی که قصد دارد درحالت «تعمیر» به اپ دسترسی پیدا کند، با خطای ۵۰۳ روبرو میشود.
حالا فرض کنید که ما نیاز داریم فقط خودمان به اپ دسترسی داشته باشیم، یا فقط افراد خاصی به اپ دسترسی داشته باشند. درهمچین موقعیتی میتوانیم از نشانه
secret--
در دستور php artisan down
مانند زیر استفاده کنیم:php artisan down --secret="1a218ffd90b12860625f694d9f5bcca6"
این نشانه باعث میشود که هرکس با داشتن مقدار این secret بتواند حالت «تعمیر» را در اپ ما دور بزند. دراین حالت ما میتوانیم به اپ خود درهنگام برقرار بودن حالت «تعمیر»، بهشکل زیر دسترسی داشته باشیم:https://localhost/1a218ffd90b12860625f694d9f5bcca6
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥9👍3👎2
🔻 متغیر loop در Blade
🔻 تا به حال خواستهاید در حلقه foreach در فایل های blade اولین بار و یا آخرین باری که یک حلقه اجرا میشود و یا اینکه کجای حلقه هستید را تشخیص دهید؟ تا به الان یک متغیر
چند نمونه از کاربرد این متغیر را در عکس بالا میتوانید ببینید.
#Blade #Loop
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔻 تا به حال خواستهاید در حلقه foreach در فایل های blade اولین بار و یا آخرین باری که یک حلقه اجرا میشود و یا اینکه کجای حلقه هستید را تشخیص دهید؟ تا به الان یک متغیر
i$
تعریف میکردیم و هربار یک واحد به متغیر اضافه میکردیم. اما داخل دایرکتیو foreach@
متغیری وجود دارد به اسم loop و حاوی اطلاعاتی هست که بهش نیاز پیدا میکنیم.چند نمونه از کاربرد این متغیر را در عکس بالا میتوانید ببینید.
#Blade #Loop
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
🔥8👍3❤2
🔸در لاراول، برای بررسی وجود یک داده در دیتابیس میتوانید از متود
این روش قدیمی است، اما هنوز هم راهکاری عالی برای این کار است.
#Eloquent #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
()exists
و ()doesNotExists
در الاکوئنت استفاده کنید. این روش قدیمی است، اما هنوز هم راهکاری عالی برای این کار است.
#Eloquent #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍9🔥1
📍در لاراول برای اینکه متوجه شوید چهچیزهایی کش شدهاند، میتوانید بهسادگی دستور زیر را در محیط پروژه اجرا کنید:
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
php artisan about --only cache
#Artisan #Tip👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍5
سه روش برای هندل کوئری های فاقد محتوا برای کاربر
#Response
👤 A.l A
💎 Channel: @DevelopixLaravel
#Response
👤 A.l A
💎 Channel: @DevelopixLaravel
❤9🔥1
🔸در لاراول، بهصورت پیشفرض اگر کسی تلاش کند به رکوردی که وجود ندارد درخواست ارسال کند، با ارور
اما از نسخه ۸ لاراول به بعد، شما میتوانید بهکمک تابع missing در فایلهای Router، این سناریو را راحتتر هندل کنید.
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
404مواجه خواهد شد، که شما برای بررسی و تغییر این ارور
404به مقداری سفارشیسازی نیاز دارید.
اما از نسخه ۸ لاراول به بعد، شما میتوانید بهکمک تابع missing در فایلهای Router، این سناریو را راحتتر هندل کنید.
#Route #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍5❤4
💢 دستورات پرکاربرد در Collection - قسمت اول
🔺 بررسی تکراری بودن آیتمها
متد duplicates آیتمهایی را نشون میدهد که در یک کالکشن تکرار شده باشند. برای مثال در کالکشن زیر reza و ali تکرار شدهاند و خروجی تابع duplicates روی آن برابر با ali و reza
خواهد بود
🔺بررسی وجود یک key (کلید) خاص در یک کالکشن
با متد has میتوانید بررسی کنید که آیا یک کلید خاص در یک کالکشن وجود داره یا نه. خروجی این متد همیشه Boolean است
🔺فیلتر کردن آیتمها
آیتمهای یک کالکشن را میتوان با متد filter، فیلتر کرد. این متد یک تابع قبول میکند که در آن باید یک شرط را مشخص کنیم و این متد همه آیتمهایی را که برابر با شرط ما باشند را برمیگرداند
#collection
👤 Maryam
💎 Channel: @DevelopixLaravel
🔺 بررسی تکراری بودن آیتمها
متد duplicates آیتمهایی را نشون میدهد که در یک کالکشن تکرار شده باشند. برای مثال در کالکشن زیر reza و ali تکرار شدهاند و خروجی تابع duplicates روی آن برابر با ali و reza
خواهد بود
$collection = collect(['ali', 'reza', 'mohammad', 'ali', 'hassan', 'reza']);
$collection->duplicates();
// [3 => 'ali', 5 => 'reza']
🔺بررسی وجود یک key (کلید) خاص در یک کالکشن
با متد has میتوانید بررسی کنید که آیا یک کلید خاص در یک کالکشن وجود داره یا نه. خروجی این متد همیشه Boolean است
$collection = collect([
'team' => 'Real Madrid',
'color' => 'white',
]);
$collection->has('rating'); // false
$collection->has(['team', 'title']); // false
$collection->has(['team', 'color']); // true
🔺فیلتر کردن آیتمها
آیتمهای یک کالکشن را میتوان با متد filter، فیلتر کرد. این متد یک تابع قبول میکند که در آن باید یک شرط را مشخص کنیم و این متد همه آیتمهایی را که برابر با شرط ما باشند را برمیگرداند
$collection = collect([1, 2, 3, 4, 5, 6]);
$even_numbers = $collection->filter(function ($value, $key) {
return $value % 3 == 0;
});
#collection
👤 Maryam
💎 Channel: @DevelopixLaravel
👍8
🔸به کمک تابع
#String #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
()squishمیتوانید بهسادگی تمام اسپیس های اضافی و غیرضروری را از یک متن حذف کنید.
#String #Tip
👤 Mahdiyar
💎 Channel: @DevelopixLaravel
👍9
💢 معرفی پکیج Laravel Debugbar
پکیج Debugbar لاراول توسط Barry vd. Heuvel ساخته شده است و به شما اجازه میدهد که تبهایی برای دیباگ کردن پروژه در حین کدنویسی داشته باشید تا روند دیباگ کردن تان سریعتر و بهتر پیش برود. همچنین این پکیج اطلاعات مفیدی از جمله: زمان اجرای کوئریها، کوئریهای فراخوانی شده در هر درخواست، زمان اجرای رندر شدن پروژه، نمایش View های لود شده در هر روت، نمایش پارامترهای ورودی هر View و ... را به شما نشان میدهد.
📌 روش نصب پکیج Laravel Debugbar
برای نصب این پکیج از طریق Composer ابتدا لازم است کد زیر را اجرا کنید:
سپس در فایل config/app.php و آرایه providers خط زیر را اضافه کنید:
و در نهایت کد زیر را به آرایه aliases اضافه کنید ( البته اگر میخواهید Facade را اضافه کنید):
📍 لازم به ذکر است که برای نمایش امکانات این پکیج لازم است که APP_DEBUG را در فایل env روی مقدار true تنظیم کرده باشید.
🔷 اطلاعات بیشتر و گیتهاب پکیج Laravel Debugbar
🔷 فیلم آموزشی کار با پکیج Laravel Debugbar
👤 Maryam
💎 Channel: @DevelopixLaravel
پکیج Debugbar لاراول توسط Barry vd. Heuvel ساخته شده است و به شما اجازه میدهد که تبهایی برای دیباگ کردن پروژه در حین کدنویسی داشته باشید تا روند دیباگ کردن تان سریعتر و بهتر پیش برود. همچنین این پکیج اطلاعات مفیدی از جمله: زمان اجرای کوئریها، کوئریهای فراخوانی شده در هر درخواست، زمان اجرای رندر شدن پروژه، نمایش View های لود شده در هر روت، نمایش پارامترهای ورودی هر View و ... را به شما نشان میدهد.
📌 روش نصب پکیج Laravel Debugbar
برای نصب این پکیج از طریق Composer ابتدا لازم است کد زیر را اجرا کنید:
composer require barryvdh/laravel-debugbar
سپس در فایل config/app.php و آرایه providers خط زیر را اضافه کنید:
'Barryvdh\Debugbar\ServiceProvider',
و در نهایت کد زیر را به آرایه aliases اضافه کنید ( البته اگر میخواهید Facade را اضافه کنید):
'Debugbar' => 'Barryvdh\Debugbar\Facade',
📍 لازم به ذکر است که برای نمایش امکانات این پکیج لازم است که APP_DEBUG را در فایل env روی مقدار true تنظیم کرده باشید.
🔷 اطلاعات بیشتر و گیتهاب پکیج Laravel Debugbar
🔷 فیلم آموزشی کار با پکیج Laravel Debugbar
👤 Maryam
💎 Channel: @DevelopixLaravel
👍8👎1
💢 آموزش View Composer
یکی از نکاتی که باعث بهینه شدن پروژه میشود این است که درخواستهایمان را به سمت سرور برای گرفتن اطلاعات از دیتابیس کمتر کنیم؛ موقعیتی را در نظر بگیرید که نیاز است یک سری اطلاعات از جدول مشخصی را به چندین ویو پاس بدهیم در این شرایط راحتترین کاری که میشود کرد این است که در روت مربوط به همه ویوها یک فانکشن ایجاد کنیم و برای هر کدام عمل کوئری انتخاب از دیتابیس را انجام دهیم و در نهایت داده دریافتی را به ویوهای مربوطه Compact کنیم.
در این شرایط علاوه بر ارسال درخواست تکراری به سمت دیتابیس ما با کدهای تکراری روبهرو هستیم که از بهینه و تمیز بودن کدها کم میکند؛ مورد دومی که شاید به ذهنتان برسد این است که یک متغیر پابلیک ایجاد کنیم و یک بار درخواست ارسال کنیم و چندین جا از آن استفاده کنیم ولی عیبی که این روش دارد این است که این متغیر داخل همه ویوها/کلاسهایی که نیاز به آن متغیر ندارند هم قابل دسترس است و نمیتوان به راحتی مشخص کرد که به کدام ویوها این متغیر ارسال شود.
برای حل چنین عیبهایی میتوان از View Composer ها استفاده کنیم با استفاده از این ویژگی لاراول میتوانیم یک کلاس یا یک تابع Callback به پروژه شناسایی کنیم و مشخص کنیم هر موقع یک View خاصی در حال رندر شدن بود آن کلاس یا تابع که به آن View Composer گفته میشود اجرا شود ( میتوانید نتیجه اجرای ویو کامپوزر و ویوتان هم برای بهینه شدن بیشتر پروژهتان کش کنید تا LCP سایتتان کمتر هم شود )
🔺نوشتن View Composer
ویوکامپوزرها معمولا در Service Provider ها تعریف میشوند که بهتر است یک سرویس پرووایدر اختصاصی ایجاد کنیم و درنهایت آن را به لیست مربوطه اضافه کنیم، برای ایجاد یک سرویس پرووایدر اختصاصی از کد زیر استفاده کنید:
با زدن این دستور یک فایل با نام ViewServiceProvider در مسیر زیر ایجاد میشود:
app/providers
بعد از ساخت فایل مربوطه باید سرویس پرووایدر مان را به لاراول شناسایی کنیم برای این کار تنها کافی است که به فایل config/app.php برید و سرویس پرووایدر تان را به آرایه Providers اضافه کنید با این کار سرویس پرووایدر مربوطه به پروژه شناسایی میشود و وقت آن است که ویو کامپوزر دلخواهمان را ایجاد کنیم.
🔺ایجاد View Composer
برای ایجاد یک ویو کامپوزر تنها کافی است به ViewServiceProvider که در مرحله قبلی ایجاد کردیم برویم و در متد boot این فایل از متد composer که در کلاس view قرار دارد استفاده کنیم:
🔺بررسی کد بالا
داخل پارامتر اول متد composer اسم ویوهایی که میخواهیم این دیتا را داشته باشند مینویسم لازم به ذکر است که میتوان در این قسمت یک آرایه بنویسم و یا مشخص کنیم به کل ویوهای یک پوشه این دیتا ارسال شود برای مثال:
در پارامتر دوم هم مقادیری که باید به ویوهای مربوطه ارسال شود را با with مشخص میکنیم، و درنهایت در ویوهای مربوطه از آنها استفاده میکنیم، صرفا با یک بار ارسال درخواست به سمت دیتابیس و عدم تکرار کد.
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
یکی از نکاتی که باعث بهینه شدن پروژه میشود این است که درخواستهایمان را به سمت سرور برای گرفتن اطلاعات از دیتابیس کمتر کنیم؛ موقعیتی را در نظر بگیرید که نیاز است یک سری اطلاعات از جدول مشخصی را به چندین ویو پاس بدهیم در این شرایط راحتترین کاری که میشود کرد این است که در روت مربوط به همه ویوها یک فانکشن ایجاد کنیم و برای هر کدام عمل کوئری انتخاب از دیتابیس را انجام دهیم و در نهایت داده دریافتی را به ویوهای مربوطه Compact کنیم.
در این شرایط علاوه بر ارسال درخواست تکراری به سمت دیتابیس ما با کدهای تکراری روبهرو هستیم که از بهینه و تمیز بودن کدها کم میکند؛ مورد دومی که شاید به ذهنتان برسد این است که یک متغیر پابلیک ایجاد کنیم و یک بار درخواست ارسال کنیم و چندین جا از آن استفاده کنیم ولی عیبی که این روش دارد این است که این متغیر داخل همه ویوها/کلاسهایی که نیاز به آن متغیر ندارند هم قابل دسترس است و نمیتوان به راحتی مشخص کرد که به کدام ویوها این متغیر ارسال شود.
برای حل چنین عیبهایی میتوان از View Composer ها استفاده کنیم با استفاده از این ویژگی لاراول میتوانیم یک کلاس یا یک تابع Callback به پروژه شناسایی کنیم و مشخص کنیم هر موقع یک View خاصی در حال رندر شدن بود آن کلاس یا تابع که به آن View Composer گفته میشود اجرا شود ( میتوانید نتیجه اجرای ویو کامپوزر و ویوتان هم برای بهینه شدن بیشتر پروژهتان کش کنید تا LCP سایتتان کمتر هم شود )
🔺نوشتن View Composer
ویوکامپوزرها معمولا در Service Provider ها تعریف میشوند که بهتر است یک سرویس پرووایدر اختصاصی ایجاد کنیم و درنهایت آن را به لیست مربوطه اضافه کنیم، برای ایجاد یک سرویس پرووایدر اختصاصی از کد زیر استفاده کنید:
php artisan make:provider ViewServiceProvider
با زدن این دستور یک فایل با نام ViewServiceProvider در مسیر زیر ایجاد میشود:
app/providers
بعد از ساخت فایل مربوطه باید سرویس پرووایدر مان را به لاراول شناسایی کنیم برای این کار تنها کافی است که به فایل config/app.php برید و سرویس پرووایدر تان را به آرایه Providers اضافه کنید با این کار سرویس پرووایدر مربوطه به پروژه شناسایی میشود و وقت آن است که ویو کامپوزر دلخواهمان را ایجاد کنیم.
🔺ایجاد View Composer
برای ایجاد یک ویو کامپوزر تنها کافی است به ViewServiceProvider که در مرحله قبلی ایجاد کردیم برویم و در متد boot این فایل از متد composer که در کلاس view قرار دارد استفاده کنیم:
View::composer('header',
funcation($view) {
$Categories = Category::all();
$view->with([
'category' => $Categories
]);
});
🔺بررسی کد بالا
داخل پارامتر اول متد composer اسم ویوهایی که میخواهیم این دیتا را داشته باشند مینویسم لازم به ذکر است که میتوان در این قسمت یک آرایه بنویسم و یا مشخص کنیم به کل ویوهای یک پوشه این دیتا ارسال شود برای مثال:
View::composer(['panel.*', 'users.header'], ... )
در پارامتر دوم هم مقادیری که باید به ویوهای مربوطه ارسال شود را با with مشخص میکنیم، و درنهایت در ویوهای مربوطه از آنها استفاده میکنیم، صرفا با یک بار ارسال درخواست به سمت دیتابیس و عدم تکرار کد.
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
👍13❤1👎1
💢 آدرسهای امضاء شده در لاراول
فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، URL مربوطه میتواند به شکل زیر باشد:
example.com/unsubscribe/4
وقتی کاربری این URL را باز میکند اشتراک خبرنامه کاربری با آیدی 4 لغو خواهد شد، حالا فرض کنید کاربری از روی عمد آیدی 4 را به 60 تغییر بدهد، در این صورت اشتراک خبرنامه کاربری با آیدی 60 هم بدون اطلاع خودش لغو خواهد شد. این سناریو میتواند به مرور باعث لغو اشتراک خبرنامه کلیه کاربران شود؛ یکی از ویژگیهایی که لاراول برای جلوگیری از این خرابکاری دارد، آدرسهای امضاء شده است؛ با استفاده از URL های امضا شده، میتوان تا حدودی از درخواستهای ایجاد شده با URL های اصلاح شده و همچنین از خرابکاریهای احتمالی جلوگیری کرد.
🔺ساختن یک Signed URL
در مثال بالا فرض کردیم URL لغو اشتراک خبرنامه به شکل زیر است:
example.com/unsubscribe/4
در نتیجه روت آن به این شکل خواهد بود:
برای امضاء و امن کردن این URL باید از متد signedRoute که در کلاس URL قرار دارد استفاده کنیم:
نتیجه کد بالا به شکل زیر خواهد داشت:
example.com/unsubcribe/1/?signature=f834ed8570e05de6c50ad10bd6abcf71e9867fcb14bdf2670b4bf572ce346f3b
و اگر کاربری این URL را تغییر داد به هیچوجه معتبر نخواهد بود و میتوان اینگونه از خراب کاریهای احتمالی جلوگیری کرد؛ همچنین لازم به ذکر است که با متد temporarySignedRoute میتوان یک تاریخ انقضاء برای URL مان مشخص کنیم و تعیین کنیم URL مربوطه تا چه زمانی میتواند معتبر باشد:
🔺 اعتبار سنجی آدرسهای امضاء شده
برای اعتبار سنجی آدرسهای مربوطه میتوانید از متد hasValidSignature که در کلاس Request قرار دارد استفاده کنید و بررسی کنید که URL مربوطه معتبر است یا خیر:
همچنین میتوانید از میدلور ValidateSignature استفاده کنید تا عملیات اعتبارسنجی خودکار انجام برای استفاده کردن از این میدلور فقط کافی است که به فایل Kernel.php بروید و کد زیر را اضافه کنید:
و در نتیجه این میدلور را به روتتان اضافه کنید:
از حالا به بعد این روت زمانی به درستی کار خواهد کرد که مقدار پارامتر signature معتبر باشید در غیر این صورت خطای 403 به کاربر نمایش داده میشود.
📍همچنین یک نمونه بسیار ساده از آدرسهای امضاء شده در این مخزن ایجاد کردهام که طبق نیاز میتوانید آن را تغییر داده و استفاده کنید
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
فرض کنید یک سیستم خبرنامه دارید و کاربری درخواست لغو اشتراک خبرنامه را دارد، URL مربوطه میتواند به شکل زیر باشد:
example.com/unsubscribe/4
وقتی کاربری این URL را باز میکند اشتراک خبرنامه کاربری با آیدی 4 لغو خواهد شد، حالا فرض کنید کاربری از روی عمد آیدی 4 را به 60 تغییر بدهد، در این صورت اشتراک خبرنامه کاربری با آیدی 60 هم بدون اطلاع خودش لغو خواهد شد. این سناریو میتواند به مرور باعث لغو اشتراک خبرنامه کلیه کاربران شود؛ یکی از ویژگیهایی که لاراول برای جلوگیری از این خرابکاری دارد، آدرسهای امضاء شده است؛ با استفاده از URL های امضا شده، میتوان تا حدودی از درخواستهای ایجاد شده با URL های اصلاح شده و همچنین از خرابکاریهای احتمالی جلوگیری کرد.
🔺ساختن یک Signed URL
در مثال بالا فرض کردیم URL لغو اشتراک خبرنامه به شکل زیر است:
example.com/unsubscribe/4
در نتیجه روت آن به این شکل خواهد بود:
Route::get('unsubscribe/{user_id}', '...')->name('unsubscribe');
برای امضاء و امن کردن این URL باید از متد signedRoute که در کلاس URL قرار دارد استفاده کنیم:
$url = URL::signedRoute('unsubscribe', ['user_id' => 1]);
نتیجه کد بالا به شکل زیر خواهد داشت:
example.com/unsubcribe/1/?signature=f834ed8570e05de6c50ad10bd6abcf71e9867fcb14bdf2670b4bf572ce346f3b
و اگر کاربری این URL را تغییر داد به هیچوجه معتبر نخواهد بود و میتوان اینگونه از خراب کاریهای احتمالی جلوگیری کرد؛ همچنین لازم به ذکر است که با متد temporarySignedRoute میتوان یک تاریخ انقضاء برای URL مان مشخص کنیم و تعیین کنیم URL مربوطه تا چه زمانی میتواند معتبر باشد:
$url = URL::temporarySignedRoute(
'unsubscribe',
now()->addMinutes(60), ['user' => 1]
);
🔺 اعتبار سنجی آدرسهای امضاء شده
برای اعتبار سنجی آدرسهای مربوطه میتوانید از متد hasValidSignature که در کلاس Request قرار دارد استفاده کنید و بررسی کنید که URL مربوطه معتبر است یا خیر:
Route::get('unsubscribe/{user_id}
/', function (Request $request) {
if (! $request->hasValidSignature()) {
abort(401);
}
// ...
});
همچنین میتوانید از میدلور ValidateSignature استفاده کنید تا عملیات اعتبارسنجی خودکار انجام برای استفاده کردن از این میدلور فقط کافی است که به فایل Kernel.php بروید و کد زیر را اضافه کنید:
protected $routeMiddleware = [
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
....
];
و در نتیجه این میدلور را به روتتان اضافه کنید:
Route::get('unsubscribe/{user_id}
', '...')->name('unsubscribe')->middleware('signed');
از حالا به بعد این روت زمانی به درستی کار خواهد کرد که مقدار پارامتر signature معتبر باشید در غیر این صورت خطای 403 به کاربر نمایش داده میشود.
📍همچنین یک نمونه بسیار ساده از آدرسهای امضاء شده در این مخزن ایجاد کردهام که طبق نیاز میتوانید آن را تغییر داده و استفاده کنید
🔗 اطلاعات بیشتر و داکیومنت مربوطه
👤 Maryam
💎 Channel: @DevelopixLaravel
👍10❤1