لاراول – عبارت های شرطی و تکرار در Blade

همانطور که تا به حال توضیح دادیم می توانیم در فایل های نما در لاراول مقادیر یک متغیر ارسال شده از کنترل گر را نمایش دهیم و یا می توانیم یک تابع یا چندین تابع را به صورت تو در تو فراخوانی کنیم. برای این کار باید از آکولادهای باز و بسته {{}} استفاده کنیم. قطعا پیش می آید که بخواهید بر اساس درستی یا نادرستی یک یا چندین شرط خروجی تغییر کند. به طور مثال آیا متغیر یا آرایه خالی (Empty) هستند یا می خواهید بررسی کنید که یک جلسه (Session) برای کاربر احراز هویت شده (Authenticated User) وجود دارد یا نه؟ در این موارد باید از عبارت شرطی if@ استفاده کنید.

عبارت شرطی if@

هدف از این عبارت دقیقا همان ساختار دستور شرطی if در پی اچ پی است با این تفاوت که دیگر از آکولادها برای تعیین محدوده دستور های هر یک از قسمت ها استفاده نمی کنیم. همچنین در انتهای ساختار شرط باید حتما عبارت endif@ نوشته شود.

عبارت شرطی در زبان پی اچ پی

عبارت شرطی در Blade

در مطالب بعدی در مورد نحوه احراز هویت (Authentication) کاربران در لاراول و ثبت نام و ورود کاربران صحبت کرده ایم ولی در این مطلب برای عنوان کردن مثال هایی از کاربرد عبارت شرطی if@ در قطعه کد زیر بررسی می شود که آیا کاربر یک کاربر احراز هویت شده است یا میهمان (Guest) است. در کد زیر بررسی می شود که آی کاربر احراز هویت شده است.

اما در کد زیر بررسی می شود که آیا کاربر میهمان است.دو متد ()auth و ()guest از جمله چندین متد کمک کننده (Helper Method) است که در لاراول وجود دارد. در مطلب های بعدی در مورد متدهای کمک کننده در لاراول بیشتر صحبت شده است.

در کنار دو متد کمک کننده ()auth و ()guest دو عبارت به نام auth@ و guest@ وجود دارند که به ترتیب کاربرد و مفهوم دو قطعه کد بالا را دارند. در دو کد زیر به ترتیب بررسی می شود که آیا کاربر احراز هویت شده است یا نه؟ توجه کنید که بازهم به ترتیب برای و تعیین انتهای عبارت ها از endauth@ و endguest@ استفاده شده است.

در قطعه کدهای زیر ابتدا توسط عبارت if@ بررسی می شود که آیا کاربر احراز هویت شده نباشد و در این صورت یک سری کد باید اجرا شوند و در غیر این صورت توسط عبارت else@ معلوم می شود که کاربر احراز هویت شده است پس باید یک سری دیگر از کدها اجرا شوند.

قطعه کد زیر مثال دیگری را نشان می دهد که در آن ابتدا توسط تابع ()count بررسی شده است که آیا تعداد عنصرهای آرایه records$ برابر با یک است و اگر این طور باشد یک سری کدها اجرا می شوند در غیر این صورت اگر تعداد عنصرهای آرایه بیشتر از یکی باشد، پس یک سری کدها اجرا خواهند شد و در غیر این صورت نتیجه می گیریم که تعداد عنصرهای آرایه صفر است، پس یک سری از کدها اجرا می شوند. توجه کنید در پایان عبارت endif@ آورده شده است.

 

عبارت شرطی switch@

switch عملکردی شبیه به ساختار شرطی if … else if … else دارد و به گونه ای عمل می کند که تنها کدهای یکی از بلاک ها اجرا می شود. قطعه کدهای زیر به ترتیب ساختار switch در پی اچ پی و عبارت switch@ در لاراول را نشان می دهد.

ساختار switch در زبان پی اچ پی

ساختار عبارت switch@ در Blade

عبارت تکرار for@

for یکی از ساختارهای حلقه تکرار در پی اچ پی است که به اندازه یک بازه یک سری از کدها را اجرا می کند. حلقه تکرار for دارای یک نقطه آغاز، یک نقطه پایان و یک گام رو به جلو (افزایشی) یا رو به عقب (کاهشی) است. قطعه کد زیر ساختار حلقه for در زبان پی اچ پی را نشان می دهد. همانطور که می بینید init counter همان نقطه شروع (به طور نمونه عدد ۱)، test condition همان نقطه پایان (به طور نمونه عدد ۱۰۰) و increment counter یک شمارنده افزایشی است که به طور نمونه یک عدد یک عدد ب جلو می رود.

قطعه کد زیر همین ساختار بالا را به صورت عبارت for@ برای لاراول نشان می دهد. همانطور که می بینید حلقه به اندازه ۱۰ گام، یعنی از عدد صفر شروع می شود و یک پله یک پله تا زمانی که عدد متغیر i$ کمتر از ۱۰ است این حلقه ادامه پیدا می کند. همانطور که در کد زیر می بینید هر بار درگام های حلقه با به کاربردن آکولادهای باز و بسته مقدار کنونی متغیر i$ نشان داده می شود.

عبارت تکرار foreach@

foreach نیز یکی دیگر از عبارت های تکرار در پی اچ پی است که به صورت کلی زیر استفاده می شود. در هر مرتبه یکی از عنصرهای درون آرایه ای به نام array$ درون متغیری به نام value$ ریخته می شود و سپس یک سری کد بر روی متغیر value$ انجام می شوند.

حالت زیر گونه دیگری از حلقه foreach را نشان می دهد که تفاوت آن با حالت بالا در این است که در کنار مقدار عنصری که درون متغیر value$ در هر گام ریخته می شود، کلید مختص به آن مقدار نیز درون متغیری به نام key$ ریخته می شود. به طور مثال در آرایه های معمولی کلید عنصر اول عدد صفر و کلید عنصر آخر یکی کمتر از طول آرایه است و در آرایه های انجمنی نیز کلید ممکن است مثلا کلیدهای name و age باشند که در مثال مطلب پیشین دیدیم.

در لاراول نیز عبارت foreach@ وجود دارد که فرمت آن شبیه با آن چیزی است که در بالا دیدیم ولی باید فرامونش نکنید که همانند عبارت های پیشین باید انتهای حلقه را با endforeach@ مشخص کنیم.

در مثال بالا آرایه ای به نام users$ به حلقه عبارت foreach@ ارسال شده است که هر بار یکی از عنصرهای آن درون متغیر user$ ریخته می شود. در این مثال کاری نداریم که مقدار متغیر user$ چیست ولی در خط دوم و توسط عبارت continue@ بررسی می شود که آیا مقدار برگشتی کلید type از شی user$ برابر با یک است، اگر برابر با یک باشد پس توسط عبارت continue@ از آن صرف نظر می شود و به سراغ عنصر بعدی درون آرایه users$ می رود.

در صورتی که مقدار برگشتی user->type$ برابر با یک نبود پس توسط کلید name از شی user$ نام کاربر نشان داده می شود. بنابراین می توانیم نتیجه بگیریم که آرایه users$ دارای دو کلید به نام type و name است که درون حلقه عبارت foreach@ به آنها دسترسی پیدا کرده ایم.