PHP에서 서비스 클래스와 특성의 차이점

11043 단어 phplaravel

서비스 등급



서비스 클래스는 다양한 위치에서 사용하려는 일부 비즈니스 로직을 수행하는 클래스입니다. 일종의 "전역"작업을 수행하는 PHP 개체입니다.

코드가 하나의 클래스 또는 다른 클래스에 자연스럽게 맞지 않으면 서비스 후보가 있는 것입니다. 예를 들어, 메일링 서비스나 사용자 생성 서비스가 있을 수 있습니다. 이들은 다른 장소에서 반복해서 반복해야 하는 작업입니다. 이것은 그들을 서비스 클래스에 대한 좋은 후보로 만듭니다.

서비스 클래스에 대한 몇 가지 아이디어:
  • Twilio를 통해 SMS 전송을 담당하는 서비스 클래스입니다.
  • Mailgun(뉴스레터 서비스)을 통해 이메일 전송을 담당하는 서비스 클래스입니다.
  • UptimeRobot API에 연결하고 데이터를 검색하는 서비스 클래스입니다.
  • 서버 또는 클라우드에서 이미지 자르기, 워터마킹 및 저장을 담당하는 서비스 클래스입니다.

  • 서비스 클래스의 예(Laravel에서)



    다음은 UptimeRobot API에 연결하고 데이터를 검색하는 서비스 클래스App\Services\UptimeRobotAPI.php의 예입니다.

    <?php
    
    namespace App\Services;
    
    use GuzzleHttp\Client;
    
    class UptimeRobotAPI
    {
      protected string $url;
      protected string $http;
      protected array $headers;
    
      public function __construct (Client $client)
      {
        $this->url = 'https://api.uptimerobot.com/v2/';
        $this->http = $client;
        $this->headers = [
          'cache-control' => 'no-cache',
          'content-type'  => 'application/x-www-form-urlencoded',
        ];
      }
    
      private function getResponse (string $uri = NULL)
      {
        // Making a GET request to UptimeRobot API using GuzzleHttp...
      }
    
      private function postResponse (string $uri = NULL, array $params = [])
      {
        // Making a POST request to UptimeRobot API using GuzzleHttp...
      }
    
      public function getMonitors ()
      {
        return $this->getResponse('getMonitors');
      }
    }
    


    이제 UptimeRobotAPI 서비스를 다음과 같이 사용할 수 있습니다.

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Services\UptimeRobotAPI;
    
    class MonitorsController extends Controller
    {
      public function showMonitors (UptimeRobotAPI $uptimeRobotAPI)
      {
        $monitors = $uptimeRobotAPI->getMonitors();
    
        return view('monitors.index', compact('monitors'));
      }
    }
    



    특성



    특성은 여러 클래스에서 재사용하고 싶지만 해당 클래스가 다른 부모로 확장되기 때문에 재사용할 수 없는 메서드 집합입니다. 특성은 언어 구조이며 PHP가 다중 클래스 확장을 지원하지 않기 때문에 만들어졌습니다.

    트레이트의 예(Laravel에서)



    다음은 Laravel 애플리케이션을 개발할 때 자주 사용하는 app/Traits/ApiResponder.php 특성의 예입니다.

    <?php
    
    namespace App\Traits;
    
    use Illuminate\Http\JsonResponse;
    use Symfony\Component\HttpFoundation\Response;
    
    trait ApiResponder
    {
      public function successResponse ($data, int $code = Response::HTTP_OK): JsonResponse {
        return response()->json([
          'data' => $data,
          'code' => $code,
        ], $code)->header('Content-Type', 'application/json');
      }
    
      public function errorResponse ($error, int $code): JsonResponse
      {
        return response()->json([
          'error' => $error,
          'code'  => $code,
        ], $code)->header('Content-Type', 'application/json');
      }
    }
    


    특성이 생성되면 다음과 같이 가져올 수 있습니다.

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Traits\ApiResponder;
    use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
    use Illuminate\Foundation\Bus\DispatchesJobs;
    use Illuminate\Foundation\Validation\ValidatesRequests;
    use Illuminate\Routing\Controller as BaseController;
    
    class Controller extends BaseController
    {
      use AuthorizesRequests, DispatchesJobs, ValidatesRequests, ApiResponder;
    
      // ...
    }
    


    트레이트를 가져오면 사용할 준비가 된 것입니다.

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\JsonResponse;
    
    class TwilioSettingsController extends Controller
    {
      public function fetchSettings (): JsonResponse
      {
        $response = TwilioSettings::getSettings();
    
        return $this->successResponse($response);
      }
    }
    



    끝. 이 기사가 도움이 되었기를 바랍니다. 더 많은 콘텐츠를 기대해주세요!

    저를 지원하고 싶다면 buy me a coffee :)

    좋은 웹페이지 즐겨찾기