لینکهای مفید برای شرکت در مسابقه:
در زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
دو سری راهنمایی برای سوالات اضافه شده است.
محمدرضا در شرکت عدالتخانه بهعنوان توسعهدهندهی بکاند مشغول به کار است. او اخیراً با یک چالش جدید مواجه شده است. همانطور که مطلع هستید، در Laravel 8 قابلیتهای جدیدی به حالت تعمیر (maintenance mode) اضافه شده است. یکی از این قابلیتها، امکان تعریف کلید secret برای حالت تعمیر است که با استفاده از آن میتوان سایت را خارج از حالت تعمیر مشاهده کرد. این قابلیت در واقع یک کوکی با نام laravel_maintenance
در مرورگر ذخیره کرده و با استفاده از آن، حالت تعمیر را برای کاربر فعلی غیرفعال میکند.
زمان اعتبار این کوکی ۱۲ ساعت است، اما تیم فنی شرکت عدالتخانه قصد دارد یک آرگومان به دستور down
موجود در Artisan اضافه کند که در صورت مقداردهی آن، کوکی laravel_maintenance
با زمان اعتبار واردشده در این آرگومان ست شود.
محمدرضا این task را برعهده گرفته، اما از پس آن برنیامده است. از شما میخواهیم این task را برای او انجام دهید.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه بهصورت زیر است:
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.آرگومانی با نام time
و مقدار پیشفرض 12
به دستور down
در Artisan اضافه کنید که در صورت مقداردهی شدن، زمان کوکی laravel-maintenance
برابر با مقدار آرگومان time
باشد. مقدار آرگومان time
یک عدد صحیح بوده و بیانگر زمان کوکی laravel-maintenance
برحسب ساعت است. تضمین میشود که عدد صفر و اعداد منفی به این آرگومان داده نمیشوند.
دستور down
بهصورت زیر اجرا خواهد شد:
در اینصورت، کاربر با ارسال درخواست به آدرس /MvYgEH651d3X4JRcys
میتواند سایت را به مدت ۲۴ ساعت خارج از حالت تعمیر مشاهده کند.
app
و config
هستید.پس از اعمال تغییرات، کل پروژه به غیر از پوشهی vendor
را Zip کرده و آپلود کنید. نام فایل Zip اهمیتی ندارد.
در این قسمت راهنماییهای سوال، به مرور اضافه میشود. مشکلاتتان در راستای حل سوال را میتوانید از بخش "سوال بپرسید" مطرح کنید.
برای تغییر رفتار دستور down
، باید کلاس جدیدی نظیر App\Console\Commands\ExtendedDownCommand
تعریف کرد. این کلاس میتواند از کلاس Illuminate\Foundation\Console\DownCommand
ارثبری کند. تنها تفاوت این کلاس با کلاس DownCommand
در signature و بدنهی متد getDownFilePayload
است.
برای پیادهسازی متدی جهت ساخت کوکی bypass، میتوان کلاسی مشابه کلاس Illuminate\Foundation\Http\MaintenanceModeBypassCookie
تعریف کرد، با این تفاوت که متد create
آن یک آرگومان جدید با نام time
نیز میپذیرد:
برای تغییر رفتار secret bypass route باید یک middleware مشابه Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance
تعریف کرد و بخش ساخت کوکی آن را تغییر داد:
در نهایت، باید یک service provider برای override کردن دستور پیشفرض down
ایجاد کرد. بدنهی متد register
این کلاس بهصورت زیر خواهد بود:
با افزودن این service provider به فایل app/config.php
، رفتار دستور پیشفرض down
تغییر میکند.