لاگچری


اخیراً ایده‌ای به ذهن هوشنگ خطور کرده است که قصد دارد آن را پیاده‌سازی کند. ایده از این قرار است که او ابتدا فریم‌ورک کوچکی را پیاده‌سازی کند و سپس یک سیستم لاگ را برای آن پیاده‌سازی کند. او این سیستم را لاگچری نامیده است.

او قسمت‌هایی از این پروژه را انجام داده، اما در پیاده‌سازی بعضی از قسمت‌ها به مشکل خورده است. شما باید برای قسمت‌هایی از پروژه که او به مشکل خورده است به او کمک کنید.

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
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
Plain text
راه‌اندازی پروژه

برای اجرای پروژه، باید 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
Plain text

در قالب بالا 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
Plain text

با ارسال درخواست به آدرس /، کاربر باید با صفحه‌ی زیر مواجه شود:

صفحه‌ی اصلی

نکات🔗

  • این پروژه از استاندارد PSR-4 برای autoloading کلاس‌ها استفاده می‌کند.
  • شما تنها مجاز به اعمال تغییرات در پوشه‌ی app و فایل‌های core/Logger.php و core/routes.php هستید.

آن‌چه باید آپلود کنید🔗

پس از اعمال تغییرات، پوشه‌های app و core را زیپ کرده و آپلود کنید.