用 PHP 建立 Pokémon API:初學者指南

DDD
發布: 2024-09-13 06:27:02
原創
1170 人瀏覽過

Building a Pokémon API in PHP: A Beginner

在本指南中,我們將逐步完成建立一個基本 PHP 專案的步驟,該專案將 Pokémon API 與 Flight 框架以及 Zebra_cURL 和 Latte 等附加套件結合使用。我們將探索設定項目、新增路線和渲染視圖。

tl;dr:在 Flight 中製作一個簡單的基於 API 的專案並不難。查看本指南中使用的程式碼。

第 1 步:設定環境

首先,我們需要設定一個新的專案資料夾。打開終端,導航到所需位置,然後執行以下命令來建立新目錄並輸入它。

mkdir flight-pokeapi
cd flight-pokeapi
登入後複製

第 2 步:安裝 Composer

在深入研究程式碼之前,我們需要確保 Composer 已安裝。 Composer 是 PHP 的依賴管理器,它將幫助我們包含必要的函式庫。

如果您沒有安裝 Composer,您可以使用以下命令安裝它:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
登入後複製

現在 Composer 已安裝在名為 ./composer.phar 的目前檔案中,讓我們管理我們的依賴項。

第三步:安裝依賴項

要管理所需的包,我們只需要使用composer添加它們。

./composer.phar require flightphp/core stefangabos/zebra_curl latte/latte
登入後複製

這將安裝:

  • Flight PHP:一個輕量級的 PHP 框架。
  • Zebra_cURL:處理 HTTP 請求的 cURL 包裝器。
  • Latte:用於渲染視圖的模板引擎。

第四步:設定index.php

接下來,讓我們為應用程式建立入口點:public/index.php。該文件將設定我們的應用程式、配置路由並處理視圖的渲染。

建立public目錄和index.php檔:

mkdir public
touch public/index.php
登入後複製

現在將以下內容加入index.php:

<?php

use flight\net\Router;
use Latte\Engine;

require __DIR__ . '/../vendor/autoload.php'; // Autoload the installed packages

// Setup Latte for view rendering
$Latte = new Engine;
$Latte->setTempDirectory(__DIR__ . '/../temp');
Flight::map('render', function(string $template_path, array $data = []) use ($Latte) {
  $Latte->render(__DIR__ . '/../views/' . $template_path, $data);
});

// Setup Zebra_cURL for handling HTTP requests
$Curl = new Zebra_cURL();
$Curl->cache(__DIR__ . '/../temp');
Flight::map('curl', function() use ($Curl) { 
    return $Curl; 
});

// Define a simple route
Flight::route('/', function() {
  echo 'hello world!';
});

Flight::start();
登入後複製

在此文件中:

  • 我們載入 Composer 的自動載入器。
  • 設定 Latte 以渲染視圖。
  • 映射一個自訂渲染方法,該方法使用 Latte 渲染 /views 資料夾中的範本。
  • 設定 Zebra_cURL 來處理 API 請求,並在我們想要呼叫它時將其對應到使用 Flight::curl()。
  • 為首頁 (/) 定義一個簡單的路由,只回傳「hello world!」

如果您想測試此設置,您可以從公用目錄啟動 PHP 伺服器:

php -S localhost:8000 -t public/
登入後複製
登入後複製

現在,在瀏覽器中造訪 http://localhost:8000/,您應該會看到「hello world!」。酷吧?

第5步:新增路由

現在我們已經設定了基本路線,讓我們加入一個使用 Pokémon API 的更複雜的路線。更新 public/index.php 以包含以下程式碼:

Flight::group('/pokemon', function(Router $router) {
    // Route to list all Pokémon types
    $router->get('/', function() {
        $types_response = json_decode(Flight::curl()->scrap('https://pokeapi.co/api/v2/type/', true));
        $results = [];
        while ($types_response->next) {
            $results = array_merge($results, $types_response->results);
            $types_response = json_decode(Flight::curl()->scrap($types_response->next, true));
        }
        $results = array_merge($results, $types_response->results);
        Flight::render('home.latte', [ 'types' => $results ]);
    });
});
登入後複製
  • 我們建立了一個 /pokemon 路線組。路線組「包圍」路線,並允許我們為組內的所有路線定義通用功能。
  • /pokemon 路由透過使用 Zebra_cURL 從 Pokémon API 取得所有可用的 Pokémon 類型來列出它們。
  • 這還不能工作,因為我們需要添加 home.latte 視圖來顯示 Pokémon 類型。

第 6 步:使用 Latte 渲染視圖

現在我們正在獲取數據,讓我們設定視圖來顯示它。建立views目錄並新增Latte模板檔案以顯示神奇寶貝類型。

mkdir views
touch views/home.latte
登入後複製

將以下程式碼加入views/home.latte:

<p>Welcome to the Pokemon World!</p>

<p>Types of Pokemon</p>
<ul>
    {foreach $types as $type}
        <li><a href="/pokemon/type/{$type->name}">{$type->name|firstUpper}</a></li>
    {/foreach}
</ul>
登入後複製

在此文件中:

  • 我們循環遍歷從路由傳遞過來的 $types 數組,並顯示每個 Pokémon 類型的名稱。

現在,訪問 /pokemon 將顯示所有神奇寶貝類型的清單!

第 7 步:分組並新增更多路線

讓我們擴展 Pokémon 路線,以獲取特定類型和單一 Pokémon 的更多詳細資訊。將以下路線加入您的 /pokemon 群組:

// Route to fetch a specific Pokémon type and list all associated Pokémon
$router->get('/type/@type', function(string $type) {
    $Curl = Flight::curl();
    $type_response = json_decode($Curl->scrap('https://pokeapi.co/api/v2/type/' . $type, true));
    $pokemon_urls = [];
    foreach($type_response->pokemon as $pokemon_data) {
        $pokemon_urls[] = $pokemon_data->pokemon->url;
    }
    $pokemon_data = [];

    // The little & here is important to pass the variable by reference.
    // In other words it allows us to modify the variable inside the closure.
    $Curl->get($pokemon_urls, function(stdClass $result) use (&$pokemon_data) {
        $pokemon_data[] = json_decode($result->body);
    });

    Flight::render('type.latte', [ 
        'type' => $type_response->name,
        'pokemons' => $pokemon_data
    ]);
});
登入後複製

在這條路線中,我們:

  • 獲取特定神奇寶貝類型的詳細信息,包括所有相關的神奇寶貝。
  • 發送多個 API 請求以獲取每個 Pokémon 的詳細資訊。
  • 使用模板 (type.latte) 渲染資料。

接下來,建立 type.latte 視圖:

touch views/type.latte
登入後複製

將以下內容加入type.latte:

<h1>{$type|firstUpper}</h1>
<ul>
    {foreach $pokemons as $pokemon}
        <li><a href="/pokemon/{$pokemon->id}">{$pokemon->name|firstUpper}</a></li>
    {/foreach}
</ul>
登入後複製

此範本顯示與特定類型關聯的每個神奇寶貝的名稱。

第8步:有效果嗎?

此時,您已經使用 Flight PHP、用於 API 請求的 Zebra_cURL 和用於視圖渲染的 Latte 設定了基本的 Pokémon API 使用者。您可以透過新增更多路線和完善範本來進一步擴展此專案。

要查看您的項目,請從公共目錄啟動 PHP 伺服器:

php -S localhost:8000 -t public/
登入後複製
登入後複製

現在,在瀏覽器中造訪 http://localhost:8000/pokemon,您應該會看到 Pokémon 類型的清單。

Menyelesaikan masalah

Jika anda memerlukan bantuan atau menghadapi masalah, anda boleh menyemak kod penuh dalam Github untuk melihat di mana anda mungkin telah tersilap langkah.

Semoga anda menikmati tutorial kecil ini. Jika anda mempunyai sebarang soalan atau memerlukan bantuan, jangan ragu untuk bertanya dalam komen di bawah. Selamat mengekod!

以上是用 PHP 建立 Pokémon API:初學者指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!