Web開発では、時間と日付関連の機能の処理は非常に一般的な要件です。 Laravelで都市ごとにサンセットタイムを照会するサービスを実装する場合は、 date_sunset()関数をカプセル化することで実装できます。 Laravelは強力なスケーラビリティを提供し、そのような機能を非常にシンプルにモジュール化します。この記事では、この関数を実装する方法を段階的に説明します。
date_sunset()は、PHPの組み込み関数です。与えられた緯度と経度、日付、その他のパラメーターに基づいて、場所の日没時間を返すことができます。基本的な使用法は次のとおりです。
date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 0, 0);
ここで、$緯度と$経度は都市の緯度と経度です。 date_sunset()は、この情報に基づいて対応する日没時間を返します。
Laravelでは、サービスクラスを作成してdate_sunset()関数をカプセル化し、それにより操作を簡素化し、コードの再利用性と保守性を高めることができます。
まず、Laravelでは、この関数をカプセル化するためにサービスクラスを作成する必要があります。このサービスクラスは、職人コマンドを介して生成できます。
php artisan make:service SunsetService
次に、 app/services/sunsetservice.phpファイルにカプセル化ロジックを実装します。
namespace App\Services;
class SunsetService
{
/**
* 街の夕日を迎えてください
*
* @param string $cityName 都市名
* @return string
*/
public function getSunsetTimeByCity(string $cityName): string
{
// 都市名を通して都市の緯度と経度情報を取得する
$coordinates = $this->getCoordinatesByCity($cityName);
if (!$coordinates) {
return '都市情報を取得できません';
}
// 日没の時間を取得します
return date_sunset(time(), SUNFUNCS_RET_STRING, $coordinates['latitude'], $coordinates['longitude'], 0, 0);
}
/**
* 根据都市名获取城市的经纬度
*
* @param string $cityName 都市名
* @return array|null
*/
private function getCoordinatesByCity(string $cityName)
{
// 外部呼び出し API 都市の緯度と経度のデータを取得します
$url = "https://api.openweathermap.org/data/2.5/weather?q={$cityName}&appid=your_api_key";
// 都市の緯度と経度のデータを取得します
$response = file_get_contents($url);
$data = json_decode($response, true);
// リクエストが成功し、緯度と経度のデータがある場合,緯度と経度に戻ります
if ($data && isset($data['coord'])) {
return [
'latitude' => $data['coord']['lat'],
'longitude' => $data['coord']['lon']
];
}
return null;
}
}
Sunsetservice Serviceクラスでは、2つの主な方法を提供します。
GetSunsettimeByCity() :都市の名前を受け取り、都市の夕日を返します。
getCoordinatesByCity() :外部API(OpenWeatherMap APIなど)を使用して、都市の名前に基づいて都市の緯度と経度を取得します。
GetCoordinatesByCity()では、OpenWeatherMap APIを使用して、都市の緯度と経度情報を取得します。実際には、 Your_api_keyが自分に適用するAPIキーを置き換える必要があります。
次に、 Sunsetserviceサービスを呼び出し、結果をフロントエンドに返すためのコントローラーが必要です。以下でコントローラーを生成できます。
php artisan make:controller SunsetController
次に、 App/http/Controllers/SunsetController.phpでサービスを使用します:
namespace App\Http\Controllers;
use App\Services\SunsetService;
use Illuminate\Http\Request;
class SunsetController extends Controller
{
protected $sunsetService;
public function __construct(SunsetService $sunsetService)
{
$this->sunsetService = $sunsetService;
}
/**
* 街の夕日を確認してください
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function getSunsetTime(Request $request)
{
$city = $request->get('city', 'Beijing');
$sunsetTime = $this->sunsetService->getSunsetTimeByCity($city);
return response()->json([
'city' => $city,
'sunset_time' => $sunsetTime
]);
}
}
次に、ルート/web.phpにコントローラーのルートを追加します:
use App\Http\Controllers\SunsetController;
Route::get('/sunset', [SunsetController::class, 'getSunsetTime']);
このルートを通じて、ユーザーはアクセス/サンセット?City =北京を介して北京を介して北京の日没時間を確認できます。
これで、 date_sunset()関数を正常にカプセル化し、都市ごとにサンセットタイムを照会するサービスを作成しました。次のURLにアクセスして、この機能をテストできます。
http://m66.net/sunset?city=Beijing
返されたJSONデータには、都市の日没時間が含まれます。
date_sunset()関数をカプセル化することにより、LaravelのCityによるサンセットタイムの照会の関数を簡単に実装できます。キャッシュメカニズムの追加、さまざまな日付クエリのサポートなど、特定のニーズに応じてこのサービスをさらに拡張できます。この記事がLaravelでこの機能を実装する方法をよりよく理解するのに役立つことを願っています。