🔻بهبود کارایی اپهای لاراولی
- قسمت سوم
🔸 ۵. بهینهسازی 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
Forwarded from Developix Support
📌 اگر دنبال تبدیل شدن به یک برنامهنویس مطرح در دنیای فریلنسری و کسب درآمد بیشتر هستی، شرکت در این کارگاه رو از دست نده!
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
💻 کارگاه تجارت بینالمللی برای برنامهنویسها؛
(فریلنسرینگ حرفهای در مقیاس جهانی)
🗓 زمان: 30 شهریور تا 6 مهر 1402
حضوری و آنلاین (2 جلسه حضوری و 5 جلسۀ آنلاین)
📝 اطلاعات بیشتر و ثبتنام
🔻و یا برای کسب اطلاعات بیشتر کافیه به آیدی ما پیام بدی!
🆔 @MaktabSharif_Admin
🌐 وبسایت |📱کانال تلگرام | 📲 اینستاگرام
❤1
Forwarded from Developix Support
برای رشد در مسیر طراحی رابط کاربری فقط با یادگیری فیگما یا سایر ابزار ها نتیجه نمیگیرید. شما باید مهارت ساخت پورتفولیو، مذاکره، اعتماد بنفس، شبکه سازی و... را برای برندسازی شخصی و نفوذ به بازار های بین المللی یاد بگیرید.
حتی برای گرفتن پروژه های خوب و استخدام نیز به آن نیاز دارید.
دوره جامع اموزش طراحی UI با فیگما
میانبری به موفقیت در طراحی رابط کاربری
💥دوره جامع و پروژه محور + 5 پروژه واقعی
💥بیش از 60 ساعت آموزش
💥اقدام محور
💥منتورینگ شخصی، پُرسش و پاسخ نامحدود
💥جزوه رنگی و هدیه مکمل
💥شروع دوره بلافاصله بعد از خرید – در حال برگزاری
۱,۴۲۱,۰۰۰ تومان ۷۲۱,۰۰۰ تومان
برای شرکت در دوره پیام بدین یا از طریق سایت فوری ثبت نام کنید. 🚀
🤯ما 6 برابر هزینه دوره را یک ماه بعد از ثبت نامتان تضمین می کنیم و کنارتانیم تا به دست بیاورید.
ظرفیت فقط 5 نفر
@HosseinAslani3
https://hossein-aslani.com/product/%d8%af%d9%88%d8%b1%d9%87-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%81%db%8c%da%af%d9%85%d8%a7-%d8%a7%d8%b2-0-%d8%aa%d8%a7-100-%d8%a8%d9%87%d9%85%d8%b1%d8%a7%d9%87-5-%d9%be%d8%b1%d9%88%da%98%d9%87/
حتی برای گرفتن پروژه های خوب و استخدام نیز به آن نیاز دارید.
دوره جامع اموزش طراحی UI با فیگما
میانبری به موفقیت در طراحی رابط کاربری
💥دوره جامع و پروژه محور + 5 پروژه واقعی
💥بیش از 60 ساعت آموزش
💥اقدام محور
💥منتورینگ شخصی، پُرسش و پاسخ نامحدود
💥جزوه رنگی و هدیه مکمل
💥شروع دوره بلافاصله بعد از خرید – در حال برگزاری
برای شرکت در دوره پیام بدین یا از طریق سایت فوری ثبت نام کنید. 🚀
🤯ما 6 برابر هزینه دوره را یک ماه بعد از ثبت نامتان تضمین می کنیم و کنارتانیم تا به دست بیاورید.
ظرفیت فقط 5 نفر
@HosseinAslani3
https://hossein-aslani.com/product/%d8%af%d9%88%d8%b1%d9%87-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%81%db%8c%da%af%d9%85%d8%a7-%d8%a7%d8%b2-0-%d8%aa%d8%a7-100-%d8%a8%d9%87%d9%85%d8%b1%d8%a7%d9%87-5-%d9%be%d8%b1%d9%88%da%98%d9%87/
Forwarded from Developix Support
This media is not supported in your browser
VIEW IN TELEGRAM
دایناسورها در حال خرید در تهران 🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
⚡️هیچوقت فکرشو میکردی که همچین تصویری رو ببینی؟
⚡️از آینده به تو سلام 😁
💠این تصویر با استفاده از یک ابزار جدید در تلگرام ساخته شده که هر متنی بهش بدی رو تبدیل به عکس میکنه!
همینالان بهش پبام بده تا عکسش رو برات بفرسته😇
فقط کافیه بزنی رو آیدی زیر و شروع کنی 😉👇🏻
@aiolearn_artbot
🌀هوشمصنوعی با پیشرفت فوقالعادش داره همه دنیار رو فرا میگیره 😉🤯
❤1👍1
💢 آشنایی با متد FirstOrCreate
از متد firstOrCreate در لاراول برای جستجو در جدولهای دیتابیس استفاده میشود و اگر رکورد با ویژگیهای مشخص یافت نشود، به طور خودکار یک رکورد جدید با آن ویژگیها را ایجاد و ذخیره میکند.
🔍 بررسی عملکرد متد firstOrCreate:
1⃣ رکوردی را با معیارهای مشخص شده را جست و جو میکند.
2⃣ اگر رکورد مورد نظر پیدا شد، آن را برمیگرداند، در غیر این صورت اگر رکورد پیدا نشد یک رکورد جدید با معیارهای مشخص شده میسازد.
🔺 مثال:
در این مثال اگر رکوردی با عنوان Article Title پیدا شد آن را برمیگرداند در غیر این صورت رکوردی با عنوان و محتوا ذکر شده به طور خودکار ساخته میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
از متد firstOrCreate در لاراول برای جستجو در جدولهای دیتابیس استفاده میشود و اگر رکورد با ویژگیهای مشخص یافت نشود، به طور خودکار یک رکورد جدید با آن ویژگیها را ایجاد و ذخیره میکند.
🔍 بررسی عملکرد متد firstOrCreate:
1⃣ رکوردی را با معیارهای مشخص شده را جست و جو میکند.
2⃣ اگر رکورد مورد نظر پیدا شد، آن را برمیگرداند، در غیر این صورت اگر رکورد پیدا نشد یک رکورد جدید با معیارهای مشخص شده میسازد.
🔺 مثال:
$article = Article::firstOrCreate(
['title' => 'Article Title'],
['content' => 'Content']
);
در این مثال اگر رکوردی با عنوان Article Title پیدا شد آن را برمیگرداند در غیر این صورت رکوردی با عنوان و محتوا ذکر شده به طور خودکار ساخته میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
👍15❤2
💢 معرفی متد ()Str::mask
از این متد برای ماسک کردن بخشی از یک رشته با یک کاراکتر خاص استفاده میشود (مثلا بخشی از شماره کارت، ایمیل و ... ). این متد در زمانی کاربرد دارد که میخواهیم اطلاعات حساسی را به کاربران بدون نمایش کامل اطلاعات نشان دهیم
🔺 مثال:
فرض کنید نیاز دارید چند کاراکتر از یک ایمیل را مخفی کنید:
- در خط دوم این مثال با استفاده از Str::mask از کاراکتر دوم تا چهار کاراکتر بعد آن با * جایگزین میشود.
- اگر پارامتر آخر را ننویسیم از کاراکتر دوم تا آخر رشته ماسک میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
از این متد برای ماسک کردن بخشی از یک رشته با یک کاراکتر خاص استفاده میشود (مثلا بخشی از شماره کارت، ایمیل و ... ). این متد در زمانی کاربرد دارد که میخواهیم اطلاعات حساسی را به کاربران بدون نمایش کامل اطلاعات نشان دهیم
🔺 مثال:
فرض کنید نیاز دارید چند کاراکتر از یک ایمیل را مخفی کنید:
$email = 'Maryam@gmail.com';
$maskedEmail = Str::mask($email, '*', 2, 4);
→ Ma****@gmail.com- در خط دوم این مثال با استفاده از Str::mask از کاراکتر دوم تا چهار کاراکتر بعد آن با * جایگزین میشود.
- اگر پارامتر آخر را ننویسیم از کاراکتر دوم تا آخر رشته ماسک میشود.
👤 Maryam
💎 Channel: @DevelopixLaravel
👍42🔥2