در مطلب ایجاد لایه اصلی در لاراول توضیح دادیم که می توانیم یک لایه اصلی (MasterLayer) ایجاد کنیم که می توانیم قالب لاراول را بر اساس آن ایجاد کنیم. در واقع لایه اصلی مبنا و زیر بنای قالب لاراول می شود. در مصال های پیشین آنرا در زیر دایرکتوری layouts در مسیر resources/views و به نام app.blade.php نامگذاری کردیم.

در این مطلب می خواهیم نوار ناوبری (Navigation Bar) سایت را ایجاد کنیم که خودش به عنوان یک فایل نما مجزا است که آنرا به درون لایه اصلی ضمیمه (Include) می کنیم. هدف از این کار این است که بخش های متفاوت لایه را به زیر فایل های نما (Sub View) بشکنیم تا بتوانیم هر یک را به صورت جداگانه توسعه، بهبود و تغییر دهیم به طوری که از بهم ریختگی و درهم بودن کدها درون یک تک فایل جلوگیری شود.

ایجاد فایل نوار ناوبری با استفاده از Bootstrap

توسط عبارت (‘layouts.app’)extend@ در ابتدای فایل welcome.blade.php لایه اصلی را به درون فایل welcome.blade.php اعمال کرده ایم. حال می خواهیم یک فایل دیگر به نام navbar.blade.php را در مسیر resources/views/layouts ایجاد کنیم که نقش نوار ناوبری را دارد و سپس این فایل را توسط عبارت ()include@ به درون فایل app.blade.php ضمیمه می کنیم تا در واقع نوار ناوبری سایت به لایه اصلی اعمال شود ولی همچنان آنرا در فایل جدا طراحی می کنیم به این دلیل که می خواهیم مجزا و به سادگی توسعه و تغییر دهیم.

کد نمونه نوار ناوبری Bootstrap

محتوای فایل navbar.blade.php که باید توسط عبارت ()include@ به فایل app.blade.php اضافه بشود

در کد بالا و توسط قطعه کد زیر که مربوط به خط ۱ تا ۹ می شود ابتدا توسط عبارت شرطی if@ بررسی کرده ایم که آیا درخواست ورودی مربوط به مسیر ریشه است یا خیر؟ اگر مربوط به مسیر ریشه باشد، پس متغیر path$ با رشته Home page مقدار دهی می شود، در غیر این صورت با نام مسیر بعلاوه Page مقدار دهی خواهد شد. به یاد داشته باشید در خط ۷ از تابع ()ucfirst برای بزرگ کردن حرف اول رشته و از علامت نقطه برای ادغام دو رشته به هم استفاده شده است.

سپس مطابق کد زیر که مربوط به خط یازدهم از برنامه است، مقدار متغیر path$ را در میان تگ های اچ تی ام ال قرار می دهد. به عبارت دیگر هر بار که صفحه ای را درخواست کنید، نام مسیر آن صفحه در فایل web.php به نشان داده می شود. شکل زیر نمونه ای از نمایش نام مسیر مربوط به مسیر about را نشان می دهد. حال شما به صفحه ای دیگر، مثلا ریشه سایت (Home Page) بروید، خواهید دید که تغییر خواهد کرد.

البته این تنها مثالی بود برای نمایش کاربر متد ()is از کلاس Request که پیش از این توضیح دادیم بریا بررسی اینکه آیا درخواست ورودی مطابق با یک الگو (Pattern) است یا خیر؟ همچنین کاربر عبارت شرطی if@ … @else … @endif نیز نشان داده شده است.

عبارت include@ در Blade

عبارت include@ نام یک فایل را نما را دریافت می کند و هر کجا که آنرا درون فایل دیگری بنویسیم، پس تمامی کدهای درون آن در فایل نما ضمیمه و اعمال می شوند. با توجه به مطلب های پیشین تا با اینجا دو فایل app.blade.php را در مسیر resources/views/layouts و welcome.blade.php را در مسیر resources/views ایجاده کرده ایم.

محتوای فایل app.blade.php که مجدد باز نویسی شده است – اضافه شده عبارت ()include@ خط ۱۰

قطعه کد بالا بازنویسی شده فایل app.blade.php است که پیش از این در مطلب ایجاد قالب ها توسط Blade آنرا ایجاد کرده بودیم. در واقع خط ۱۰ که مطابق کد زیر است به آن و در بالای بخش (‘yield(‘content@ اضافه شده است. به عبارت دیگر بخش نوار ناوبری که درون فایل resources/views/layouts/navbar.blade.php قزار دارد در تمامی صفحه های دیگر و در بالای بخش محتوای سایت اضافه می شود ولی چون در فایل جدایی طراحی شده است، پس می توانیم به سادگی و بدون دردسر آنرا جدا زا بقیه فایل ها تغییر و توسعه دهیم.

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

در خط های ۱۹ و ۲۲ قطعه کد مربوط به فایل navbar.blade.php می بینید که از متد کمک کننده ای (Helper Method) به نام ()action استفاده شده است. در مطالب بعدی به طور کامل در مورد Helper ها صحبت کرده ایم ولی در این مطلب از متد ()action استفاده کردیم تا آدرس URL مربوط به متد یک کنترل گر را بدست آوریم و سپس از آن در تگ a اچ تی ام ال استفاده کنیم تا پیوندهای درون نوار ناوبری به صفحه های متفاوت را ایجاد کنیم.

متد کمک کننده ()action یک رشته شامل نام کلاس کنترل گر و نام یکی از متدهای آنرا را دریافت می کند و سپس آدرس URL مربوط به مسیر آنرا برگشت می دهد. به طور مثال در خط ۱۹ رشته HomePageController@indexPage ارسال شده است. این دقیقا همان چیزی است که در فایل web.php برای انتساب یک متد از یک کلاس کنترل به مسیر (Route) نوشته بودیم پس خط ۱۹ باید آدرس ریشه سایت یعنی http://127.0.0.1:8000 را برگشت می دهد و رشته HomePageController@aboutPage آدرس صفحه تماس با ما، یعنی http://127.0.0.1:8000/about را برگشت می دهد.

بررسی اینکه آیا فایل نما وجود دارد

لاراول اجازه می دهد تا بررسی کنید که آیا یک فایل نما وجود دارد یا خیر؟ برای این کار باید در زمان ایجاد مسیر (Route) در فایل web.php باید به صورت زیر از متد ()exists استفاده کنیم. در قطعه کد زیر که فرض شده است که درون یک متد از کلاس کنترل گر یا حتی درون یک تابع بی نام وجود دارد، ابتدا بررسی می شود که آیا یک فایل نما وجود دارد یا نه. اگر  وجود داشت، پس متغیر view$ با نام آن فایل نما مقدار دهی می شود و در غیر این صورت متغیر view$ با نام فایل نما دیگر مقدار دهی خواهد شد. در نهایت از طریق متد ()view فایل نما انتخاب شده را فراخوانی می کنیم.

ضمیمه کردن فایل نما به شرط وجود آن با عبارت ()includeIf@

اگر بخواهیم پیش از ضمیمه کردن یک فایل درون فایل دیگر بررسی کنیم که آیا فایل وجود دارد، باید از عبارت ()includeIf@ استفاده کنیم. بنابراین اگر فایل وجود داشت ضمیمه خواهد شد. کد زیر بازنویسی شده خط ۱۰ قطعه کد فایل app.blade.php است.

ضمیمه کردن فایل نما به شرط درستی شرط با عبارت ()includeWhen@

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

احراز هویت کاربران در لاراول

اما می توانید از کد زیر نیز استفاده کنید که معادل قطعه کد بالا است با این تفاوت که بسیار ساده و کوچکتر است. می توانید این لینک را برای یک مثال بیشتر بخوانید.