اخیراً ایدهای به ذهن هوشنگ خطور کرده است که قصد دارد آن را پیادهسازی کند. ایده از این قرار است که او ابتدا فریمورک کوچکی را پیادهسازی کند و سپس یک سیستم لاگ را برای آن پیادهسازی کند. او این سیستم را لاگچری نامیده است.
او قسمتهایی از این پروژه را انجام داده، اما در پیادهسازی بعضی از قسمتها به مشکل خورده است. شما باید برای قسمتهایی از پروژه که او به مشکل خورده است به او کمک کنید.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلها
logtury
├── app
│ └── Controllers
│ └── HomeController.php
├── core
│ ├── Logger.php
│ ├── Router.php
│ ├── View.php
│ └── routes.php
├── public
│ ├── assets
│ │ └── plugins
│ │ └── tailwind
│ │ └── tailwind.min.css
│ └── index.php
├── resources
│ └── views
│ ├── about.php
│ ├── contact.php
│ └── index.php
├── storage
│ └── logs
├── test
│ └── LogturySampleTest.php
├── composer.json
└── composer.lock
راهاندازی پروژه
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
- پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
- دستور
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید. - دستور
php -S 127.0.0.1:8000 -t public
را در پوشهی اصلی پروژه اجرا کنید. پروژه از طریق آدرس http://127.0.0.1:8000 در دسترس خواهد بود.
در اولین گام باید کدهای این پروژه را مطالعه کرده و با منطق پروژه آشنا شوید. در ادامه، باید تغییراتی که در ادامه ذکر شده است را در پروژه اعمال کنید.
ابتدا باید کلاس Core\Logger
را پیادهسازی کنید، اگر به این کلاس مراجعه کنید خواهید دید که دارای کانستراکتور و دو متد writeLog
و getLog
است، پیادهسازی هرکدام باید بهصورت زیر باشد:
- کانستراکتور مسیر فایلی که قرار است لاگها در آن نوشته شوند را دریافت میکند.
- از متد
writeLog
برای نوشتن متنی برروی فایل لاگ استفاده میشود. - از متد
getLog
برای دریافت محتوای فایل لاگ استفاده میشود.
سپس باید روتهای زیر را به پروژه اضافه کنید:
- روت
/
که باید متدindex
از کلاسHomeController
را فراخوانی کند. - روت
/about-us
که باید متدabout
از کلاسHomeController
را فراخوانی کند. - روت
/contact-us
که باید متدcontact
از کلاسHomeController
را فراخوانی کند.
در انتها باید این متدها را در کنترلر HomeController
پیادهسازی کنید به نحوی که اگر هر روت فراخوانی شد، ابتدا در فایل storage/logs/app.log
و در یک خط عبارتی با قالب زیر درج شود:
[CURRENT_DATE_TIME] - [NAME] Page Visited
در قالب بالا CURRENT_DATE_TIME
بهمعنی تاریخ و ساعت کنونی است که باید با فرمت Y-m-d H:i:s
باشد و مقدار NAME
هم باید برای روت /
برابر با Home
، برای روت /about-us
برابر با About
و برای روت /contact-us
برابر با Contact
باشد.
سپس ویوی مربوط به هر روت render
و برگردانده شود (با استفاده از کلاس View
):
- برای روت
/
ویویresources/views/index
- برای روت
/about-us
ویویresources/views/about
- برای روت
/contact-us
ویویresources/views/contact
مثال
فرض کنید کاربری بهترتیب روتهای /
سپس /about-us
و در انتها /contact-us
را میبیند. در نهایت، باید مقادیر زیر در فایل storage/logs/app.log
ذخیره شده باشند (خروجی متد getLog
):
2021-11-19 18:05:06 - Home Page Visited
2021-11-19 18:05:08 - About Page Visited
2021-11-19 18:05:09 - Contact Page Visited
با ارسال درخواست به آدرس /
، کاربر باید با صفحهی زیر مواجه شود:
نکات
- این پروژه از استاندارد PSR-4 برای autoloading کلاسها استفاده میکند.
- شما تنها مجاز به اعمال تغییرات در پوشهی
app
و فایلهایcore/Logger.php
وcore/routes.php
هستید.
آنچه باید آپلود کنید
پس از اعمال تغییرات، پوشههای app
و core
را زیپ کرده و آپلود کنید.
ارسال پاسخ برای این سؤال