پیش از این گفتیم که فایل index.php
به منزلهٔ نقطهٔ شروع این پروژهٔ تِستِر خواهد بود که با کدهای زیر آن را تکمیل خواهیم کرد:
<!DOCTYPE html>
<html>
<head>
<title>Articles List</title>
<meta charset="utf-8">
</head>
<body>
<div>
<a href="signin">Sing in</a> | <a href="signup">Sing up</a>
</div>
<h1>Articles List</h1>
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://rest-api-blog.local/api/v1/articles');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['content-type: application/json']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo $err;
} else {
$response = json_decode($result, true);
}
?>
<?php if (is_array($response['response']['message'])) { ?>
<ul>
<?php foreach($response['response']['message'] as $article) { ?>
<li>
<a href="show/index.php?id=<?= $article['articleId'] ?>">
<?= $article['articleTitle'] ?>
</a>
</li>
<?php } ?>
</ul>
<?php } else { ?>
<p>No article found!</p>
<?php } ?>
<a href="create">Create a new article</a>
</body>
</html>
چنانچه این فایل را داخل مرورگر باز کنیم، میبینیم که ابتدا دکمههای لاگین و ثبتنام را درج نموده سپس لیستی از مقالات را به نمایش در آوردهایم و در انتها نیز دکمهای برای افزودن یک مقالهٔ جدید اضافه کردهایم اما آنچه حائز اهمیت است، تفسیر کدهای پیاچپی موجود داخل این فایل است که در ادامه آنها را مورد بررسی قرار خواهیم داد.
پس از باز کردن تگ آغازین php?>
در خط دوازدهم، پیش از هر چیز متغیری ساختهایم به نام curl$
که مقدار آن را برابر با فانکشن ()curl_init
قرار دادهایم به طوری که این فانکشن وظیفه دارد تا پروسهٔ استفاده از این لایبرری را شروع نماید. سپس در خطوط چهاردهم تا شانزدهم از فانکشن ()curl_setopt
استفاده نمودهایم که این امکان را در اختیارمان میگذارد تا یکسری آپشن برای کِرل در نظر بگیریم با این توضیح که CURLOPT_URL
مشخصکنندهٔ اِندپوینت مد نظرمان است و همانطور که میبینیم، آدرس کامل اِندپوینتی که مسئول نمایش لیست مقالات است را درج کردهایم و آپشن CURLOPT_HTTPHEADER
این امکان را در اختیارمان میگذارد تا یکسری هِدِر خاصی که مد نظر داریم را به همراه ریکوئستمان ارسال نماییم به طوری که میباید یک آرایه در نظر گرفت و هِدِرهایی که میخواهیم ارسال نماییم را به عنوان اِلِمانهای این آرایه درج نماییم؛ به طور مثال، در حال حاضر گفتهایم که نوع محتوا جیسیون باشد و در نهایت به CURLOPT_RETURNTRANSFER
میرسیم که اگر برابر با مقدار true
یا 1
باشد، نتیجه را در قالب یک استرینگ باز میگرداند.
در ادامه، متغیری ساختهایم به نام result$
و مقدار آن را برابر با فانکشن ()curl_exec
قرار داده و متغیر curl$
را به عنوان پارامتر ورودی این فانکشن در نظر گرفتهایم؛ همانطور که از نام این فانکشن مشخص است، وظیفه دارد تا پروسهٔ ارسال ریکوئست به اِندپوینت مد نظر را اجرا کند. همچنین متغیری دیگری تحت عنوان err$
ساخته و مقدار آن را برابر با (curl_error($curl
قرار دادهایم که این وظیفه را دارا است تا چنانچه این لایبرری با مشکلی مواجه شد، مشکل یا اِکسپشن موجود را داخل این متغیر ذخیره سازد. در این مرحله از کار، برای آن که پروسهٔ ارسال ریکوئست را به پایان برسانیم، از دستور (curl_close($curl
استفاده خواهیم کرد.
در ادامه، با استفاده از یک دستور شرطی گفتهایم که اگر مقدار متغیر err$
برابر با true
بود، محتویات آن را نمایش دهد و در غیر این صورت وارد بلوک else
شده و ابتدا با استفاده از فانکشن ()json_decode
محتویات متغیر result$
را دیکُد کرده و نتیجه را داخل متغیر جدیدی به نام response$
بریزد.
نکته |
در نظر گرفتن آرگومانی تحت عنوان true برای ()json_decode باعث میگردد تا خروجی آبجکت به یک آرایه مبدل گردد. |
سپس با استفاده از یک دستور شرطی گفتهایم که اگر محتوای موجود در ['response['response']['message$
یک آرایه بود، روی آن foreach
زده و با استفاده از تگ <ul></ul>
یک لیست ساخته و کلید ['article['articleId$
که حاوی نام مقاله میباشد را چاپ کنیم. همچنین برای آن که بتوانیم محتویات هر مقاله را مشاهده کنیم، از تگ <a></a>
استفاده کرده و مقدار اتریبویت href
آن را برابر با فولدر show
سپس فایل index.php
قرار داده و پارامتری تحت عنوان id
که حاوی مقداری برابر با ['article['articleId$
یا به عبارتی شناسهٔ مقاله است را نیز شامل میشود.
در پایان لازم به یادآوری است که اگر محتوای موجود در ['response['response']['message$
یک آرایه نبود، وارد بلوک else
شده و استرینگی مبنی بر اینکه «هیچ مقالهای یافت نشد.» را در معرض دید کاربر قرار میدهیم.