در پست اول از این سری تا اینجا پیش رفتم که دیتابیس طراحی شد و قرار شد از یک قالب آماده استفاده کنم.

قالب محبوب مترونیک را پیاده سازی کردم و صفحه اصلی داشبود bug tracker ما این شکلی شد:

سیستم احراز هویت (authentication)

احراز هویت(authentication) را قبلا بدون پکیج پیشفرض لاراول درست می کردم اما این بار تصمیم گرفتم برای سرعت بیشتر کار با استفاده از laravel-breeze این‌کار را انجام بدهم. تنها به جای استفاده از view پکیج، از ظاهر قالب مترونیک استفاده کردم. بعد از نصب پکیج تنها کاری که انجام دادم تغییر اسم input های صفجات لاگین و رجیستر قالب مترونیک به اسم input های پیشفرض پکیج breeze بود. البته action تگ form را هم به روت پیشفرض پکیج تغییر دادم. با این کار تمام سیستم احراز هویت به طرز معجزه آسایی درست شد.

<form method="POST" action="{{route('login')}}" >
@csrf
//
//....
</form>

سرویس ایمیل برای استفاده در لوکال هاست

برای تست ارسال ایمیل روی لوکال هاست از سرویس mailtrap استفاده کردم. mailtrap یک سرویس انلاین است که به ما این امکان را می‌دهد تا روی لوکال هاست ایمیل ارسال کنیم و نتیجه آن را ببینیم. در واقع یک inbox مجازی در اختیار ما می‌گذارد. ایمیل هایی که از لوکال ارسال می کنیم به آنجا منتقل می شوند.

inbox سروسیس mailtrap

مثلا این یک نمونه ایمیل بازیابی پسورد است که ارسال شده.

استفاده از component های لاراول برای جلوگیری از تکرار کد

یک مسئله ای سعی کردم در همین ابتدای پروژه رعایت کنم استفاده درست از قابلیت کامپوننت لاراول بود.

فرض کنید همچنین بخشی در سایتمان داریم. این یک جدول برای نمایش داده های دیتابیس مثلا اطلاعات پروژه هاست. قطعا این جدول به همین شکل اما با عنوان های مختلف در بخش های دیگر برنامه استفاده خواهد شد.

به همین خاطر اینجا یک کامپوننت تعریف کردم و کد این جدول را داخل کامپوننت گذاشتم. با این تفاوت که به جای هاردکد
(hard code) کردن عنوان ها از یک آرایه استفاده کردم.

@foreach ($titles as $title)
 <th class="min-w-125px sorting"

>{{$title}}</th>
                                
@endforeach

در هر view که از این کامپوننت استفاده می‌کنم در کنترلر یک آرایه پاس می‌دهم تا این عنوان ها به ترتیب جایگزین شوند. این شکلی مجبور نیستم هر بار که همچین جدولی خواستم همه کد جدول را کپی کنم و دستی عنوان ها را بنویسم.

class ProjectController extends Controller
{
    public function index()
    {
        $titles = ['Project Name', 'Description', 'Created By', 'Users', 'Created at'];
   
        return view('projects.list', compact('titles'));
    }

 }

در view هم به این شکل کامپوننت را لود میکنم.

<x-card-table :titles="$titles" ></x-card-table>

تا اینجا کارهای اولیه مثل authentication و درست کردن ظاهر برنامه انجام در ادامه باید بروم سراغ پیاده سازی منطق برنامه. اینکه کاربری که ثبت نام کرده باید بتواند یک پروژه ایجاد کند و برای پروژه bug تعریف کند.