Media is too big
VIEW IN TELEGRAM
این ارائه بی نظیر خانم jess Archer تیم لیدر لاراول و از دست ندید
چیزی نمیتونم بگم فقط تماشا کنید =)
یک پرزنتیشن کامل از nightwatch
بنظرم داره میاد که سنتری و لاراول پالس و لاراول دیباگ و تلسکوپ بریزیم دور
اول به طور کامل پرزنتش میکنه بعد نحوه نصبش و توضیح میده
بعد سیستم دیزاینش و این که پشت صحنه چطور این اپلیکیشنتون رو مانیتور میکنه رو توضیح میده
و قسمت هیجان انگیزش این هست که این رو یکماه روی laravel forge فعالش کردن دیتایی که توی یکماه جمع کرده ، هندل کرده پردازش کرده ، هوش از سرتون میپرونه
ببینید و لذت ببرید
خیلی دوست دارم کد هاشو بخونم😊 🥺
@panicdev
چیزی نمیتونم بگم فقط تماشا کنید =)
یک پرزنتیشن کامل از nightwatch
بنظرم داره میاد که سنتری و لاراول پالس و لاراول دیباگ و تلسکوپ بریزیم دور
اول به طور کامل پرزنتش میکنه بعد نحوه نصبش و توضیح میده
بعد سیستم دیزاینش و این که پشت صحنه چطور این اپلیکیشنتون رو مانیتور میکنه رو توضیح میده
و قسمت هیجان انگیزش این هست که این رو یکماه روی laravel forge فعالش کردن دیتایی که توی یکماه جمع کرده ، هندل کرده پردازش کرده ، هوش از سرتون میپرونه
ببینید و لذت ببرید
خیلی دوست دارم کد هاشو بخونم
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
توی رمان A Study in Scarlet¹ نوشته آرتور کانن² یه قسمتی هست که یکی از کارکتر ها به اسم دکتر واتسن³ متوجه میشه که شرلوک هلمز⁴ از گردش زمین به دور خورشید بیخبر هست و از این مسئله خیلی تعجب میکنه؛ این میشه که از هلمز میپرسه که چرا و جواب هلمز خیلی جالبه:
"با توجه به ظرفیت محدود مغز بشر؛ من نمیتوانم اجازه دهم که اطلاعات بیاستفاده جای اطلاعات مفید را بگیرد.
به من چه دخلی دارد؟
تو میگویی که حول خورشید میگردیم.
اگر به دور ماه هم میگشتیم قِرانی در من و کارم تفاوت ایجاد نمیکرد."
"با توجه به ظرفیت محدود مغز بشر؛ من نمیتوانم اجازه دهم که اطلاعات بیاستفاده جای اطلاعات مفید را بگیرد.
به من چه دخلی دارد؟
تو میگویی که حول خورشید میگردیم.
اگر به دور ماه هم میگشتیم قِرانی در من و کارم تفاوت ایجاد نمیکرد."
Wikipedia
A Study in Scarlet
first Sherlock Holmes novel by Sir Arthur Conan Doyle
👍6🔥4🌚1
به عنوان یک فرد که توی زندگی روزمرهش از کلی ابزار و تکنولوژی استفاده میکنه تعریفتون از مفهوم "کاربرد پذیر بودن" چی هست؟ 🤔
برام بنویسید تا یکم با دیدگاهتون آشنا بشم و بعدش یه تاپیک درمورد کاربرد پذیری و مفهومش رو براتون توضیح میدم تا درموردش بحث کنیم.
هرچیزی که درمورد "کاربرد پذیر بودن" به ذهنتون میرسه رو بگید بهم...
مثلا
کاربرد پذیر بودن یعنی "آیا کاری را که من به انجام آن احتیاج دارم به درستی انجام میدهد؟"
برام بنویسید تا یکم با دیدگاهتون آشنا بشم و بعدش یه تاپیک درمورد کاربرد پذیری و مفهومش رو براتون توضیح میدم تا درموردش بحث کنیم.
هرچیزی که درمورد "کاربرد پذیر بودن" به ذهنتون میرسه رو بگید بهم...
مثلا
کاربرد پذیر بودن یعنی "آیا کاری را که من به انجام آن احتیاج دارم به درستی انجام میدهد؟"
Panic Dev
به عنوان یک فرد که توی زندگی روزمرهش از کلی ابزار و تکنولوژی استفاده میکنه تعریفتون از مفهوم "کاربرد پذیر بودن" چی هست؟ 🤔 برام بنویسید تا یکم با دیدگاهتون آشنا بشم و بعدش یه تاپیک درمورد کاربرد پذیری و مفهومش رو براتون توضیح میدم تا درموردش بحث کنیم. هرچیزی…
خب همونطور که انتظار میرفت - کلی جواب های متفاوت از کاربرد پذیری و تعریفش رو از افراد مختلف شنیدیم.
استاد استیو کروگ توی کتابش میگه:
"تعاریف بسیار متفاوتی از کاربرد پذیری خواهید یافت که اغلب آن را به ویژگی هایی مانند اینها تقسیم میکنند:"
۱. مفید: آیا کاری که مردم به آن احتیاج دارند را انجام میدهد؟
۲. قابل یادگیری: آیا استفاده کنندگان میتوانند سر در بیاورند که چطوری از آن استفاده کنند؟
۳. به یاد ماندنی: آیا پس از هربار استفاده باید دوباره آن را برای استفادهی مجدد یاد بگیرند؟
۴. به درد بخور: آیا کار مورد نظر را تا آخر انجام میدهد؟
۵. به صرفه: آیا کار مورد نظر را با صرف میزان معقولی از وقت و انرژی انجام میدهد؟
۶. خواستنی: آیا مردم آنرا میخواهند؟
۷. دلپذیر: آیا استفاده از آن لذت بخش و یا حتی سرگرم کننده است؟
⭐️ اما نکته کجاست؟
استیو کروگ در ادامه میگه:
تمام این موارد درسته اما بخش مهم این تعاریف ساده هست.
اگر چیزی کاربرد پذیر باشد،
چه وبسایت باشد یا کنترل تلوزیون یا حتی دستگیره درب
بدین معنی است که:
"فردی با توانایی و تجربه متوسط (یا حتی کمتر از متوسط) باید بتواند سر در بیاورد که چطور از آن برای. انجام کاری استفاده کند بدون اینکه آن چیز بیش از آنچه که ارزشش را دارد دردسر داشته باشد."
این ساده ترین و درست ترین تعریف برای مفهوم کاربرد پذیری هست.
استاد استیو کروگ توی کتابش میگه:
"تعاریف بسیار متفاوتی از کاربرد پذیری خواهید یافت که اغلب آن را به ویژگی هایی مانند اینها تقسیم میکنند:"
۱. مفید: آیا کاری که مردم به آن احتیاج دارند را انجام میدهد؟
۲. قابل یادگیری: آیا استفاده کنندگان میتوانند سر در بیاورند که چطوری از آن استفاده کنند؟
۳. به یاد ماندنی: آیا پس از هربار استفاده باید دوباره آن را برای استفادهی مجدد یاد بگیرند؟
۴. به درد بخور: آیا کار مورد نظر را تا آخر انجام میدهد؟
۵. به صرفه: آیا کار مورد نظر را با صرف میزان معقولی از وقت و انرژی انجام میدهد؟
۶. خواستنی: آیا مردم آنرا میخواهند؟
۷. دلپذیر: آیا استفاده از آن لذت بخش و یا حتی سرگرم کننده است؟
⭐️ اما نکته کجاست؟
استیو کروگ در ادامه میگه:
تمام این موارد درسته اما بخش مهم این تعاریف ساده هست.
اگر چیزی کاربرد پذیر باشد،
چه وبسایت باشد یا کنترل تلوزیون یا حتی دستگیره درب
بدین معنی است که:
"فردی با توانایی و تجربه متوسط (یا حتی کمتر از متوسط) باید بتواند سر در بیاورد که چطور از آن برای. انجام کاری استفاده کند بدون اینکه آن چیز بیش از آنچه که ارزشش را دارد دردسر داشته باشد."
این ساده ترین و درست ترین تعریف برای مفهوم کاربرد پذیری هست.
👍17
🤩 ورسل یه ابزاری زده به اسم grep که شما میتونید خیلی ساده باهاش توی چند میلیون ریپازیتوری پابلیک هرچیزی که دوس دارید رو سرچ بزنید و پیداش کنید.
🎩 یکی از کاربرد های دارکش هم اینه که شما میتونید بگردید دنبال کلید هایی که اشتباها پوش شده توی ریپازیتوری ها :))
مثلا لایسنس لاراول نوا توی env از طریق یه کلید به اسم:
ست میشه - همین رو اگه سرچ کنید تمام ریپازیتوری هایی که این کلید اشتباها توشون پوش شده رو براتون میاره...
🔗 https://grep.app
استفاده به کام 😎🔥
🎩 یکی از کاربرد های دارکش هم اینه که شما میتونید بگردید دنبال کلید هایی که اشتباها پوش شده توی ریپازیتوری ها :))
مثلا لایسنس لاراول نوا توی env از طریق یه کلید به اسم:
NOVA_LICENSE_KEY=ست میشه - همین رو اگه سرچ کنید تمام ریپازیتوری هایی که این کلید اشتباها توشون پوش شده رو براتون میاره...
استفاده به کام 😎🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
grep.app
Code Search | Grep by Vercel
Effortlessly search for code, files, and paths across a million GitHub repositories.
🤣16🔥9👍3🌚1
شاید دنبال پرامپت باشید . به marketplace هایی مثل این بر بخورید
که تقریبا همه پرامپت ها فروشی
promptbase.com
ولی خوب از این سایت هم که دوستان گیت هابی زحمت کشیدن هم میتونید استفاده کنید برای مدل های مختلف
https://prompts.chat
@panicdev
که تقریبا همه پرامپت ها فروشی
promptbase.com
ولی خوب از این سایت هم که دوستان گیت هابی زحمت کشیدن هم میتونید استفاده کنید برای مدل های مختلف
https://prompts.chat
@panicdev
👍8🤣2
#نکته : حتماً متوجه شدین که لاراول داره بیشتر و بیشتر از Attributes استفاده میکنه و حسابی از این قابلیت که توی PHP 8.0 معرفی شد، بهره میبره! 🤌
این دو Attribute کاربردی رو میدونستین؟ 🤔
💉 اتریبیوت
🗄 اتریبیوت
همهی اینا برای داشتن کد تمیزتر و خواناتر هست!😊 😊 🍫
@panicdev
این دو Attribute کاربردی رو میدونستین؟ 🤔
💉 اتریبیوت
[CurrentUser]# بهتون اجازه میده کاربر احراز هویت شده رو هر جایی تزریق کنین.🗄 اتریبیوت
[RouteParameter('user')]# دسترسی به پارامترهای مسیر رو خیلی راحتتر میکنه.همهی اینا برای داشتن کد تمیزتر و خواناتر هست!
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍8❤🔥5
🚀 جلوگیری از اجرای تصادفی کامندهای خطرناک در پروداکشن !
آیا میدانستید از لاراول ۱۱.۹ به بعد میتونین اجرای کامندهای حساس مثل migrate و db:wipe رو توی محیط Production بلاک کنین، فقط با اضافه کردن Trait جدید Prohibitable! 🔒
📌 چطوری؟ خیلی ساده:
حالا میتونین توی بوت اپلیکیشن، این دستورات رو مسدود کنین:
یا خیلی راحت با DB Facade این کار رو انجام بدین:
✅ متد
خیلی کاربردیه، نه؟😎
@panicdev
آیا میدانستید از لاراول ۱۱.۹ به بعد میتونین اجرای کامندهای حساس مثل migrate و db:wipe رو توی محیط Production بلاک کنین، فقط با اضافه کردن Trait جدید Prohibitable! 🔒
📌 چطوری؟ خیلی ساده:
use Illuminate\Console\Command;
use Illuminate\Console\Prohibitable;
class SomeDestructiveCommand extends Command
{
use Prohibitable;
}
حالا میتونین توی بوت اپلیکیشن، این دستورات رو مسدود کنین:
FreshCommand::prohibit();
RefreshCommand::prohibit();
ResetCommand::prohibit();
WipeCommand::prohibit();
یا خیلی راحت با DB Facade این کار رو انجام بدین:
DB::prohibitDestructiveCommands($this->app->isProduction());
✅ متد
prohibit() یه مقدار Boolean میگیره و میتونین شرطی تنظیمش کنین که فقط توی Production بلاک بشه و توی Development بدون مشکل اجرا بشه. 💡 خیلی کاربردیه، نه؟
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍7❤🔥3
📝 یک Rich Text Editor در لاراول با پکیج Rich Text Laravel
اگه توی پروژههاتون نیاز به یه ویرایشگر متن پیشرفته دارین، پکیج Rich Text Laravel که از Trix Editor پشتیبانی میکنه، گزینهی عالیایه! 🎯
📌 نصب و راهاندازی:
🛠 بروزرسانی مدل
📝 اعتبارسنجی در Form Request
🖋 استفاده از Blade Component
💡 میتونین دکمههای ویرایشگر رو شخصیسازی کنین و حتماً ورودیها رو با Symfony’s HTML Sanitizer ایمنسازی کنین! 🔒
💡 نگران attachment ها هم نباشید . اون هارو هم بخوبی پشتیبانی میکنه و راحت میتونید دریافتشون کنید و مدیریتشون کنید
💡 کامپوننت لایوایری هم داره که میتونید توی پروژه های لایوایری هم ازش استفاده کنید .
💡 داکیومنت خوب و تکمیلی داره که میتونید ریپازیتوری مربوطه را مشاهده کنید . لینک
اگه به یه ویرایشگر متن قوی برای لاراول نیاز دارین، این پکیج رو امتحان کنین! 🚀
اگه توی پروژههاتون نیاز به یه ویرایشگر متن پیشرفته دارین، پکیج Rich Text Laravel که از Trix Editor پشتیبانی میکنه، گزینهی عالیایه! 🎯
📌 نصب و راهاندازی:
composer require tonysm/rich-text-laravel
php artisan richtext:install
🛠 بروزرسانی مدل
use Tonysm\RichTextLaravel\Models\Traits\HasRichText;
class Product extends Model
{
use HasFactory, HasRichText;
protected $richTextAttributes = ['denoscription']; // فیلدهای ویرایشگر متن
protected $fillable = ['name', 'price', 'type', 'denoscription'];
}
📝 اعتبارسنجی در Form Request
$this->validate([
'name' => ['required', 'string', 'max:255'],
'price' => ['required', 'decimal:10,2'],
'type' => ['required'],
'denoscription' => ['nullable', 'string'],
]);
🖋 استفاده از Blade Component
<x-trix-input id="denoscription" name="denoscription"
:value="old('denoscription', $product->denoscription?->toTrixHtml())" autocomplete="off" />
💡 میتونین دکمههای ویرایشگر رو شخصیسازی کنین و حتماً ورودیها رو با Symfony’s HTML Sanitizer ایمنسازی کنین! 🔒
💡 نگران attachment ها هم نباشید . اون هارو هم بخوبی پشتیبانی میکنه و راحت میتونید دریافتشون کنید و مدیریتشون کنید
💡 کامپوننت لایوایری هم داره که میتونید توی پروژه های لایوایری هم ازش استفاده کنید .
💡 داکیومنت خوب و تکمیلی داره که میتونید ریپازیتوری مربوطه را مشاهده کنید . لینک
اگه به یه ویرایشگر متن قوی برای لاراول نیاز دارین، این پکیج رو امتحان کنین! 🚀
GitHub
GitHub - tonysm/rich-text-laravel at madewithlaravel.com
Integrates the Trix Editor with Laravel. Inspired by the Action Text gem from Rails. - GitHub - tonysm/rich-text-laravel at madewithlaravel.com
👍8🔥4❤🔥2
🔐 افزایش امنیت حساب با
لاراول یه قابلیت امنیتی قوی داره که با
🛠 چطور پیادهسازی کنیم؟
مثلاً وقتی کاربر فعالیت مشکوک حس کرد، میتونیم همه سشنها (بهجز فعلی) رو ببندیم:
✅ نکته: این قابلیت نیاز به
🔑 تغییر رمز عبور + خروج از تمام دستگاهها
🔒 چرا این قابلیت مهمه؟
✅ کاربر میتونه روی امنیت حساب خودش کنترل بیشتری داشته باشه.
✅ دسترسی غیرمجاز به حساب به خاطر سشنهای فراموششده جلوگیری میشه.
یه لایهی امنیتی قویتر برای اپلیکیشنهای لاراول!🔥
Auth::logoutOtherDevices() در لاراوللاراول یه قابلیت امنیتی قوی داره که با
Auth::logoutOtherDevices() میتونین تمام سشنهای کاربر روی دستگاههای دیگه رو ببندین و فقط دستگاه فعلی رو فعال نگه دارین. این ویژگی برای محافظت از دادههای حساس خیلی مفیده! 🚀 🛠 چطور پیادهسازی کنیم؟
مثلاً وقتی کاربر فعالیت مشکوک حس کرد، میتونیم همه سشنها (بهجز فعلی) رو ببندیم:
public function secureSessions(Request $request)
{
Auth::logoutOtherDevices($request->password);
return back()->with('status', 'همهی سشنهای دیگر بسته شدند');
}
✅ نکته: این قابلیت نیاز به
auth.session middleware داره: Route::middleware(['auth', 'auth.session'])->group(function () {
// مسیرهای محافظتشده
});🔑 تغییر رمز عبور + خروج از تمام دستگاهها
class SecurityController extends Controller
{
public function updatePassword(Request $request)
{
$validated = $request->validate([
'current_password' => 'required',
'new_password' => 'required|min:8|confirmed'
]);
if (!Hash::check($request->current_password, Auth::user()->password)) {
return back()->withErrors([
'current_password' => 'رمز عبور فعلی اشتباه است'
]);
}
Auth::logoutOtherDevices($request->current_password);
Auth::user()->update([
'password' => Hash::make($request->new_password)
]);
return redirect('/dashboard')
->with('status', 'رمز عبور بروزرسانی شد و همهی دستگاههای دیگر خارج شدند');
}
}
🔒 چرا این قابلیت مهمه؟
✅ کاربر میتونه روی امنیت حساب خودش کنترل بیشتری داشته باشه.
✅ دسترسی غیرمجاز به حساب به خاطر سشنهای فراموششده جلوگیری میشه.
یه لایهی امنیتی قویتر برای اپلیکیشنهای لاراول!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v12.0.0 · laravel/framework
[12.x] Prep Laravel v12 by @driesvints in #50406
[12.x] Make Str::is() match multiline strings by @SjorsO in #51196
[12.x] Use native MariaDB CLI commands by @staudenmeir in #51505
[12.x] Adds miss...
[12.x] Make Str::is() match multiline strings by @SjorsO in #51196
[12.x] Use native MariaDB CLI commands by @staudenmeir in #51505
[12.x] Adds miss...
❤🔥14👍4🕊2🔥1
کیت استارتر های جدید 🔥
Vue: https://github.com/laravel/vue-starter-kit
React: https://github.com/laravel/react-starter-kit
Livewire: https://github.com/laravel/livewire-starter-kit
Vue: https://github.com/laravel/vue-starter-kit
React: https://github.com/laravel/react-starter-kit
Livewire: https://github.com/laravel/livewire-starter-kit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍1
🚀 خوب Laravel 12 و قابلیت جدید `when()` با Closure!
توسعهدهندههای لاراول، احتمالاً با متد
💡 چرا این قابلیت مهمه؟
چون باعث میشه شرطهای پیچیدهتر رو بهشکل خواناتر و تمیزتر بنویسیم!
مثال:
یا برای تعیین مهلت پرداخت فاکتور:
✅ نتیجه؟ کد تمیزتر، خواناتر و انعطافپذیرتر! 😎
@panicdev
توسعهدهندههای لاراول، احتمالاً با متد
when() آشنا هستین، ولی میدونستین که توی Laravel 12 به بعد حالا میتونین از Closure بهعنوان شرط استفاده کنین؟ 🤌 💡 چرا این قابلیت مهمه؟
چون باعث میشه شرطهای پیچیدهتر رو بهشکل خواناتر و تمیزتر بنویسیم!
مثال:
$taxRate = when(
$country === 'US',
fn() => 0.07, // ۷٪ مالیات برای آمریکا
fn() => 0.2 // ۲۰٪ مالیات برای سایر کشورها
);
یا برای تعیین مهلت پرداخت فاکتور:
$invoiceDueDate = when(
fn() => $user->isVIP() && now()->isWeekday(),
fn() => now()->addDays(10), // کاربران VIP ده روز اضافه دارند
fn() => now()->addDays(5) // کاربران عادی پنج روز اضافه دارند
);
✅ نتیجه؟ کد تمیزتر، خواناتر و انعطافپذیرتر! 😎
@panicdev
🔥16❤🔥1👍1
🚀 معرفی
لاراول یه helper به اسم
🔹 مثال ساده:
✅ پاسخ فوراً به کاربر نمایش داده میشه، اما بعد از ۳ ثانیه، لاگ ذخیره میشه!
🔹 کاربرد واقعی:
مثلاً توی یه صفحهی مشاهده دوره آموزشی، میخوایم دوره رو به عنوان "در حال پیشرفت" برای کاربر علامت بزنیم، ولی این عملیات نیازی نداره که قبل از نمایش صفحه اجرا بشه:
✅ کاربر صفحه رو فوراً میبینه، اما عملیات در پسزمینه اجرا میشه.
🔥 چرا
✔️ برای کارهای سبک و سریع که نیاز به اجرا در لحظه ندارن.
✔️ نیازی به تنظیمات صف و اجرای
✔️ پردازش بعد از ارسال پاسخ انجام میشه، بدون تأخیر در نمایش صفحه!
⚠️ بهتره برای کارهای سنگین مثل پردازش ویدیو از صفها استفاده کنین، نه `defer`!
نتیجه: یه ابزار عالی برای بهینهسازی درخواستهای لاراول! 🚀✨
defer در لاراول لاراول یه helper به اسم
defer داره که میتونین بعضی از پردازشها رو بعد از ارسال پاسخ اجرا کنین، بدون نیاز به صفها! 🎯 🔹 مثال ساده:
Route::get('/', function () {
defer(function () {
sleep(3);
\Log::info('Some log');
});
return response(' پاسخ ارسال شد');
});✅ پاسخ فوراً به کاربر نمایش داده میشه، اما بعد از ۳ ثانیه، لاگ ذخیره میشه!
🔹 کاربرد واقعی:
مثلاً توی یه صفحهی مشاهده دوره آموزشی، میخوایم دوره رو به عنوان "در حال پیشرفت" برای کاربر علامت بزنیم، ولی این عملیات نیازی نداره که قبل از نمایش صفحه اجرا بشه:
defer(fn () => $this->addCourseToProgress->handle(auth()->user(), $course));
✅ کاربر صفحه رو فوراً میبینه، اما عملیات در پسزمینه اجرا میشه.
🔥 چرا
defer بهتر از صفهاست؟ ✔️ برای کارهای سبک و سریع که نیاز به اجرا در لحظه ندارن.
✔️ نیازی به تنظیمات صف و اجرای
queue:work نداره. ✔️ پردازش بعد از ارسال پاسخ انجام میشه، بدون تأخیر در نمایش صفحه!
⚠️ بهتره برای کارهای سنگین مثل پردازش ویدیو از صفها استفاده کنین، نه `defer`!
نتیجه: یه ابزار عالی برای بهینهسازی درخواستهای لاراول! 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🛠 چطور `defer` در لاراول کار میکند؟
در نگاه اول، ممکنه فکر کنین که
لاراول از طریق Middleware مخصوص به نام
🔍 پشت صحنه اجرای
📌 لاراول متدی به نام
✅ یعنی اگه پاسخ موفقیتآمیز باشه (کد ۲xx یا ۳xx)، توابع
🤔 چطور لاراول بعد از ارسال پاسخ،
شاید عجیب باشه، چون درخواست کاربر تموم شده و پاسخ ارسال شده، ولی چطور
✅ دلیلش اینه که PHP روی FastCGI اجرا میشه که اجازه میده پردازش بعد از ارسال پاسخ هم باز بمونه و اجرا بشه!
📌 ترتیب اجرای
1️⃣ کاربر
2️⃣ لاراول کالبک
3️⃣ پاسخ (
4️⃣ (پردازش PHP هنوز باز هست) 🚀
5️⃣ لاراول متد
6️⃣ و`defer` اجرا شده و عملیات در پسزمینه پردازش میشه.
7️⃣ بعد PHP این کد رو بدون تأخیر در نمایش پاسخ، در پسزمینه اجرا میکنه.
✅ این دقیقاً مثل queue نیست ولی شبیه اجراهای پسزمینهای هست که بعد از ارسال پاسخ، وظایف رو اجرا میکنه!
@panicdev
در نگاه اول، ممکنه فکر کنین که
defer یه چیزی شبیه صفها (queues) هست، ولی در واقع اینطور نیست! لاراول از طریق Middleware مخصوص به نام
InvokeDeferredCallbacks پردازشهای defer رو بعد از ارسال پاسخ اجرا میکنه. 🔍 پشت صحنه اجرای
defer 📌 لاراول متدی به نام
terminate داره که بعد از ارسال پاسخ، توابع defer ذخیرهشده رو اجرا میکنه: class InvokeDeferredCallbacks
{
public function terminate(Request $request, Response $response)
{
Container::getInstance()
->make(DeferredCallbackCollection::class)
->invokeWhen(fn ($callback) => $response->getStatusCode() < 400 || $callback->always);
}
}
✅ یعنی اگه پاسخ موفقیتآمیز باشه (کد ۲xx یا ۳xx)، توابع
defer اجرا میشن! 🤔 چطور لاراول بعد از ارسال پاسخ،
defer رو اجرا میکنه؟ شاید عجیب باشه، چون درخواست کاربر تموم شده و پاسخ ارسال شده، ولی چطور
defer هنوز اجرا میشه؟ 🤔 ✅ دلیلش اینه که PHP روی FastCGI اجرا میشه که اجازه میده پردازش بعد از ارسال پاسخ هم باز بمونه و اجرا بشه!
📌 ترتیب اجرای
defer در لاراول 1️⃣ کاربر
/ رو باز میکنه. 2️⃣ لاراول کالبک
defer رو ذخیره میکنه (ولی اجرا نمیکنه). 3️⃣ پاسخ (
response) فوراً به کاربر نمایش داده میشه. 4️⃣ (پردازش PHP هنوز باز هست) 🚀
5️⃣ لاراول متد
terminate رو اجرا میکنه. 6️⃣ و`defer` اجرا شده و عملیات در پسزمینه پردازش میشه.
7️⃣ بعد PHP این کد رو بدون تأخیر در نمایش پاسخ، در پسزمینه اجرا میکنه.
✅ این دقیقاً مثل queue نیست ولی شبیه اجراهای پسزمینهای هست که بعد از ارسال پاسخ، وظایف رو اجرا میکنه!
@panicdev
👍7🔥1
من به عنوان attacker وب سایت شمارو مورد بررسی قرار میدم
و میخوام که یوزر نیم پسورد کاربران شمارو پیدا کنم !
یک روش که میتونه کار من رو راحت کنه این هستش که وقتی یوزر نیم و پسورد رو وارد میکنم
به من یک خطای واضح برگرونید
مثلا
- ایمیل وارد شده یافت نشد
- پسورد وارد شده اشتباه است .
خوب من اگه رندوم ایمیل های مختلف رو وارد کنم و یه جا به جای خطای
- ایمیل / یوزر نیم وارد شده اشتباه است ببینم که خطای پسورد وارد شده اشتباه هست رو برگردوندید .
میفهمم که این ایمیل تو سیستم شما وجود داره و میرم سراغ پسورد .
حالا برای این که کار من رو سخت کنید .
میاید تحت هر شرایطی ( چه ایمیل چه پسورد ) اشتباه باشه
خطا میدید که اطلاعات وارد شده صحیح نمی باشد .
خوب من میام یکم پیشرفته تر عمل میکنم
چند درخواست همزمان میفرستم سمت سرور شما و تایم ریسپانسی که به من میدید رو چک میکنم
هرجایی که ریسپانس زودتری برگردونید میفهمم که یوزر/ایمیلی که دادم تو سیستم شما نیست .
هرجایی که ریسپانس بیشتر طول کشید میفهمم که ایمیل/یوزر نیم داخل سیستم شما هست و فقط پسورد اشتباه هست .
برای این که کار من و سخت تر کنید . چه راه حلی دارید ؟ ( بدون AI بگید اگر که جوابی دارید . )
Please open Telegram to view this post
VIEW IN TELEGRAM