현재 위치: > 최신 기사 목록> Laravel의 캡슐화 date_sunset () 서비스는 도시 일몰 쿼리를 제공합니다

Laravel의 캡슐화 date_sunset () 서비스는 도시 일몰 쿼리를 제공합니다

M66 2025-05-31

웹 개발에서 시간 및 날짜 관련 기능 처리는 매우 일반적인 요구 사항입니다. City의 일몰 시간을 쿼리하는 Laravel에서 서비스를 구현하려면 date_sunset () 함수를 캡슐화하여이를 구현할 수 있습니다. Laravel은 강력한 확장 성을 제공하여 이러한 기능을 매우 간단하게 모듈화합니다. 이 기사에서는이 기능을 구현하는 방법을 단계별로 설명합니다.

1. date_sunset () 함수 소개

date_sunset () 는 PHP의 내장 기능입니다. 주어진 위도 및 경도, 날짜 및 기타 매개 변수에 따라 장소의 일몰 시간을 반환 할 수 있습니다. 기본 사용량은 다음과 같습니다.

 date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 0, 0);

위도$ 경도는 도시의 위도와 경도입니다. date_sunset () 은이 정보에 따라 해당 일몰 시간을 반환합니다.

2. date_sunset () 함수를 캡슐화하십시오

Laravel에서는 서비스 클래스를 생성하여 Date_Sunset () 함수를 캡슐화하여 작업을 단순화하고 코드의 재사용 성과 유지 가능성을 향상시킬 수 있습니다.

2.1 서비스 클래스를 만듭니다

먼저 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;
    }
}

2.2 설명

SunSetService 서비스 클래스에서는 두 가지 주요 방법을 제공합니다.

  • getSunsetTimeByCity () : 도시 이름을 받고 도시의 일몰 시간을 반환합니다.

  • getCoordinatesBycity () : 외부 API (예 : OpenWeatherMap API)를 사용하여 도시의 이름을 기반으로 도시의 위도와 경도를 얻으십시오.

GetCoordinatesBycity () 에서는 OpenWeatherMap API를 사용하여 도시의 위도 및 경도 정보를 얻습니다. 실제로 your_api_key가 스스로 적용하는 API 키를 교체해야합니다.

3. 서비스를 사용할 컨트롤러를 만듭니다

다음으로 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
        ]);
    }
}

3.1 라우팅 구성

다음으로 Loutes/Web.php 에서 컨트롤러의 경로를 추가하십시오.

 use App\Http\Controllers\SunsetController;

Route::get('/sunset', [SunsetController::class, 'getSunsetTime']);

이 경로를 통해 사용자는 브라우저를 통해 City = Beijing에 액세스 할 수 있습니다. 베이징의 일몰 시간을 확인할 수 있습니다.

4. 테스트

이제 date_sunset () 함수를 성공적으로 캡슐화하고 City의 일몰 시간을 쿼리하는 서비스를 만들었습니다. 다음 URL을 방문 하여이 기능을 테스트 할 수 있습니다.

 http://m66.net/sunset?city=Beijing

반환 된 JSON 데이터에는 도시의 일몰 시간이 포함됩니다.

요약

date_sunset () 함수를 캡슐화하여 Laravel의 City에서 일몰 시간을 쿼리하는 기능을 쉽게 구현할 수 있습니다. 캐싱 메커니즘 추가, 다른 날짜 쿼리 지원 등과 같은 특정 요구에 따라이 서비스를 더 확장 할 수 있습니다.이 기사는 Laravel 에서이 기능을 구현하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다!