در مطلب های پیشین سعی کردیم تا مفهوم میان افزارها و کاربرد آنها را همراه با یک مثال بیان کنیم. در این مطلب می خواهیم مثالی دیگر از کاربرد میان افزارها را در برنامه های لاراول نشان دهیم. برای همین از طریق بسته ای از پیش نوشته شده برای لاراول به نام laravel-menu، می خواهیم نحوه ایجاد منو (Menu – Navigation Bar) را نشان دهیم.

لاراول – کاربرد و نوشتن میان افزار

احراز هویت از طریق HTTP – میان افزار لاراول

در این مطلب ابتدا روش نصب بسته laravel-menu را توضیح می دهیم و سپس یک میان افزار به نام GenerateMenus ایجاد می کنیم و کدهای لازم برای ایجاد منو (Menu) را درون آن قرار خواهیم داد. این مطلب بر گرفته از راهنمای این بسته است که پیشنهاد می کنم آنرا برای آگاهی بیشتر و آشنایی با ویژگی های آن، مطالعه کنید.

نصب بسته laravel-menu

برای نصب بسته laravel-menu از طریق خط فرمان (Command Line) سیستم عامل خود وارد مسیر ریشه پروژه شوید، جایی که فایل composer.json وجود دارد و سپس توسط دستور زیر بسته laravel-menu را نصب کنید. با اجرای دستور زیر آخرین نسخه بسته نصب خواهد شد.

توجه کنید ایندوره مبتنی بر لاراول ۵.۷ است و با اجرای دستور بالا دیگر نیاز به انجام کار اضافی دیگری نیست ولی اگر شما بر روی نسخه ۵.۴ به پیش کار می کنید، پس باید فایل config/app.php را مطابق با راهنمای نصب بسته ویرایش کنید. بنابراین گام های زیر برای نسخه های ۵.۵ به بالا لازم نیست.

ایجاد میان افزار

همانطور که پیش از این گفتیم برای به کار گیری بسته laravel-menu نیاز به ایجاد یک میان افزار به نام GenerateMenus است که توسط دستور زیر ایجاد می شود. سپس مطابق شکل زیر باید مسیر فایل میان افزار را به آرایه middlewareGroups$ و به درون کلید web اضافه کنید.

پس از آن باید نمونه کدهای زیر را درون فایل GenerateMenus.php (فایل میان افزار) وارد کنیم. در کدهای زیر از کلاسی به نام Menu و از متد آن یعنی ()make برای ایجاد یک شی به نام MyNavBar$ استفاده کرده ایم که از این متغیر می توانیم برای نمایش آیتم های درون منو استفاده کنیم.

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

اما متدهای ()make و ()add در کدام فایل ها وکلاس ها تعریف شده اند و چه کاربردی دارند؟ کاربرد متغیر menu$ در کد بالا چیست؟ کلاس ها و تمامی فایل بسته laravel-menu پس از نصب در مسیر زیر قرار می گیرند. لطفا با توجه به پروژه خود به مسیر زیر بروید که با دایرکتوری vendor در محل قرارگیری فایل پروژه شروع می شود. در نهایت درون زیر دایرکتوری Menu تمامی کلاس ها را می بینید.

متد ()make در کلاس Menu و در فایل Menu.php تعریف شده است. دو وروی را دریافت می کند که نخستین آنها نام یک رسته دلخواه است که در این مطلب آنرا MyNavBar نامگذاری کرده ایم و در واقع از آن به عنوان یک متغیر استفاده می شود که در تک کد بالا می بینید توسط آن به متدی به نام ()asUl دسترسی پیدا کرده ایم.

دومین ورودی یک تابع بی نام است که این تابع نیز نام یک متغیر که در این مطلب menu$ نام دارد را دریافت می کند. در واقع این متغیر شی از نوع کلاس Item است که در فایل Item.php تعریف شده است. پس متد ()make دو متغیر را برگشت می دهد که یکی برای دسترسی به منو (MyNavBar) و دیگری برای اضافه کردن آیتم ها توسط متد ()add از کلاس Item استفاده می شوند.

اما قطعه کد ()MyNavBar->asUl چه حروجی دارد؟ کدهای زیر تگ های اچ تی ام ال را نشان می دهد که نتیجه اجرای قطعه کد فوق است. همانطور که می بینید در واقع آدرس و نام مربوط به منو توسط دستور فوق (متد ()asUl) ایجاد می شود.

متد ()add از کلاس  Item دو مقدار را به عنوان ورودی دریافت می کند، نخستین وردی نامی است که می خواهیم برای در منو به نمایش دهیم و ورودی دوم نام یک مسیر است که پیش از این در فایل web.php ایجاد کرده بودیم. بنابراین خروجی متد ()asUl ترکیبی از تگ های ul و li اچ تی ام ال است که هر تگ li شامل تگ a است که آدرسی را تعیین می کند که به هر کدام از مسیرها اشاره دارند.

متد action برای پیدا کردن آدرس URL یک کنترل گر

توجه کنید که خود منو درون فایل میان افزار تعیین شده است و مسیرها درون فایل web.php تعریف شده اند و درون فایل میان افزار و توسط متد ()add ابتدا یک نام را برای هر یک از آیتم های منو تعیین می کنیم و در آٰگومان دوم نام مسیری را تعیین می کنیم که آدرس آن باید درون تگ a در هر یک از li های خروجی متد ()asUl قرار گیرد.

جمع بندی و ویژگی ها

بسته laravel-menu دارای ویژگی ها و متدهای فراوانی است که می توانید برای آگاهی از آنها، راهنما را بخوانید. به طور مثال می توانید از نام یک کلاس کنترل گر به همراه یکی از متدهای آن در متد ()add استفاده کنید. همچنین می توانید زیر منو (Sub Menu) را نیز توسط آن ایجاد کنید. می توانید به هر کدام از آیتم های منو به صورت دستی یک عدد منحصر به فرد اعطا کنید.

تعدادی متد برای دسترسی به آیتم های یک منو وجود دارد. همچنین می توانیم خصوصیت های تگ های اچ تی ام ال مانند خصوصیت class را کنترل و اداره کنیم. هر یک از آیتم های درون منو به صورت فعال (Active) است. به طور مثال اگر در صفحه خانگی باشیم، آیتم صفحه خانگی (Home Page) فعال خواهد بود و در بقیه صفحه ها نیز به همین صورت خواهد بود.

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