در دو نوشته پیشین در مورد داده های JOSN و دریافت داده از درون محتوای وب صحبت کردیم. در این مطلب می خواهیم یک کنترل گر به نام WeatherController را ایجاد کنیم که وظیفه آن دریافت وضعیت اب وهوا است. در مطلب قبلی توضیح دادیم که چگونه درون پی اچ پی به هر یک از المان های دریافت شده از فرمت JSON دسترسی پیدا کنیم. در این مطلب ابتدا یک مسیر (Route) می نویسیم و سپس یک کنترل گر ایجاد و کدهایی که در مطلب قبلی توضیح دادیم را در آن نوشته و در نهایت مقادیر بدست آمده را درون یک فایل نما نمایش می دهیم.

نوشتن Route

در فایل web.php کد زیر را وارد کنید. در کد زیر مسیر weather نوشته شده است که یک پارامتر اختیاری را به عنوان نام شهر دریافت می کند. همانطور که در کنترل گر خواهید دید، درون متد ()showWeather پارامتر ورودی را با مقدار پیش فرض شهر tehran مقدار دهی کرده ایم، به عبارتی اگر نام شهر را تعیین نکنیم، پس شهر تهران پیش فرض خواهد بود.

ایجاد و نوشتن کنترل گر

ابتدا با دستور php artisan make:controller WeatherControllerفایل weathercontroller.php و کلاس WeatherController را ایجاد کنید. پیش از این با کدهای درون آن آشنا شده اید ولی چند مورد باقی مانده است که می بایست توضیح دهیم.

متد ()showWeather یک آرگومان ورودی به نام city$ دریافت می کند که همان پارامتر اختیاری درون مسیر است که در کد قبلی تعریف و تعیین کرده بودیم. مقدار این آرگومان به صورت پیشفرض tehran است و به این معنی است که اگر نام شهری را تعریف نکنیم، وضعیت آب و هوا تهران را نمایش می دهد.

در خطوط ۵ و ۶ و ۷ به ترتیب سه متغیر ایجاد شده اند که متغیر apiKey$ رشته API KEY را نگه می دارد. متغیر apiURL$ از ترکیب آرگومان ورودی city$ و متغیر apiKey$ ایجاد می شود. در واقع رشته کوئری (Query String) را به مسیر =https://api.openweathermap.org/data/2.5/weather?q الحاق کرده ایم.

متغیر imageUrl$ مسیر پایه http://openweathermap.org/img/w را برای نمایش تصویر وضعیت آب و هوا را تعیین می کند. هر وضعیت آب و هوا دارای یک آیکون است و هر آیکون نیز دارای یک شناسه مانند 02d یا 10d است. برای اطلاعات بیشتر اینجا را بخوانید.

در خط سوم یک آرایه به نام weatherData$ ایجاد کرده که پس از این آنرا به صورت یک آرایه انجمنی استفاده خواهیم کرد. در خط ۱۸ از طریق کلید cod از آرایه انجمنی jsonData$ کد وضعیت درخواست را درون متغیر responseCode$ ذخیره کرده ایم. اگر مقدار آن برابر با ۲۰۰ باشد به معنی درخواست معتبر و دریافت پاسخ مطلوب است.

در خطوط ۲۲ و ۲۳ و زمانی که کد برگشتی برابر با ۲۰۰ باشد، دو کلید به نام های description و icon درون آرایه weatherData$ ایجاد می کنیم که آنرا پیش از این در خط سوم تعریف کرده بودیم. سپس کل آرایه را به همراه نام شهر ورودی در متغیر city$ را به فایل نما به نام weather.blade.php ارسال می کنیم.

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

در نهایت اگر کد برگشتی برابر با عدد ۲۰۰ نبود به معنی بروز خطا است و در این حالت به جای نمایش فایل نما، یک رشته برگشت داده می شود که شامل تگ های اچ تی ام ال نیز است.

ایجاد فایل نما

در مسیر resource/views یک فایل به نام weather.blade.php ایجاد کنید. مستقل از اینکه خودتان می توانید به هر طریقی از تگ های اچ تی ام ال استفاده کنید، توجه کنید که یک تگ img برای نمایش ایکون احتیاج داریم.

در خط ۸ از کد اچ تی ام ال بالا که مطابق دستور زیر است بازهم از جفت آکولادهای باز و بسته برای نمایش مقدار یک متغیر استفاده کرده ایم با این تفاوت که در اینجا تابع ()ucfirst را نیز فراخوانی کرده ایم. در پی اچ پی از تابع ()ucfirst برای تبدیل حرف اول رشته به حرف بزرگ (UpperCase) استفاده می شود.

بنابراین می توانیم نتیجه بگیریم که از طریق موتور غالب Blade در لاراول می توانیم درون یک نما و در میان جفت آکولادهای باز و بسته، توابع پی اچ پی را مطابق با مقدار متغیر و هدفمان فراخوانی کنیم. در مقابل تابع ()ucfirst تابع ()lcfirst وجود دارد.

استفاده از تابع ()strtolower برای تبدیل تمامی حروف رشته به حروف کوچک

استفاده از تابع ()strtoupper برای تبدیل تمامی حروف رشته به حروف بزرگ

استفاده از تابع ()ucwords برای تبدیل حرف اول تمامی لغت های درون یک جمله به حرف بزرگ. تفاوت با ()ucfirst در این است که ()ucwords حرف اول تمامی لغت های درون جمله را به حرف بزرگ تبدیل می کند و در جمله هر لغت حداقل با یک فضای خالی از دیگری جدا شده است. همچنین در خط های ۷۷ و ۷۸ از کد نما بالا مقادیر دو کلید description و icon از آرایه weatherData$ را نمایش داده ایم. شکل های زیر به ترتیب سه خروجی را نشان می دهد. برای درک بهتر به مسیرهای نوشته شده در شکل های زیر دقت کنید.

هچنین می توانید این لینک را به عنوان نمونه کاربرد و پیشنهاد ساده دیگر بخوانید که تصویر Heade سایت بر اساس وضعیت آب و هوا تغییر می کند.

دانلود کد Laravel JSON Part2