분류 php

PHP 8.0을 위한 새로운 프레임 워크 — Aphiria

컨텐츠 정보

  • 조회 331 (작성일 )

본문

링크 : 문서소스 코드


당신이 무슨 생각을 하는지 이미 알고 있습니다. 다른 PHP 프레임 워크? Laravel / Symfony / Slim / etc를 사용하지 않는 이유는 무엇입니까? 전에는 먼저 그것에 대해 약간의 역사를 파헤칩니다.


모든 것이 시작된 방법 


2014 년 2 월에 저는 결국 제 첫 번째 PHP 프레임 워크가 될 Opulence 작업을 시작했습니다. 나는 아직도 침대에 누워서 열이 나고 지루했던 것을 기억한다. 저는 REST API에 대해 읽고 있었습니다. 당시 저에게는 새로운 개념이었습니다.

많은 개발자들이 그렇듯이 REST 및 ORM을 더 잘 이해할 수 있도록 자체 라이브러리를 작성하는 것으로 시작했습니다.

나는 그들이 낮의 빛을 볼 줄은 몰랐지만 곧 내가 일하던 회사는 내가 만들고 있는 물건의 종류를 정확히 필요로 했다. 따라서 풍요가 태어났습니다. 프레임 워크의 기능이 얼마나 풍부한 지 자랑스러웠지만 시간이 지남에 따라 몇 가지 일에 집중하고 예외적으로 잘 수행하는 것보다 기능 세트가 너무 광범위하다는 것을 깨달았습니다.

Opulence와 같이 떠오르는 프레임 워크에서는 모든 면에서 다른 풀 스택 프레임 워크를 따라 잡는 것이 불가능했습니다. 공기가 빠졌다.


그 무렵 저는 직업을 바꾸고 ASP.NET Core 개발을 시작했습니다. 저는 개발자 경험이 얼마나 훌륭한 지에 매료되었습니다. API 작성은 간단했습니다.


// Create an endpoint for retrieving a user
public class UserController : Controller
{
    private readonly IUserService _users;
    
    public UserController(IUserService users)
    {
        _users = users;
    }

    [HttpGet("users/{id}")]
    public User GetUserById(int id)
    {
        return _users.GetUserById(id);
    }
}

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        // Register the middleware
        app.UseMiddleware<AuthMiddleware>();
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        // Configure dependency injection
        services.AddScoped<IUserService, SqlUserService>();
    }
}


이로 인해 .NET에서 배운 것을 PHP로 이식하려고 시도했습니다. 2017 년에 Opulence 2.0을 쓰기 시작했습니다. 저의 첫 번째 조치는 ORM과 같이 지원할 에너지가 없었던 Opulence 부분을 버리고 대신 ASP.NET Core의 가장 좋은 부분을 차용한 훌륭한 REST API 프레임 워크를 구축하는 데 모든 노력을 기울였습니다.


나는 구문을 올바르게 만드는 데 몇 달을 보냈습니다. 하지만 Opulence 2.0이 1.0에서 크게 벗어 났기 때문에 양심적으로 같은 이름으로 부를 수 없다는 것이 분명해졌습니다 (AngularJS 1 대 Angular 2 사태를 생각해보십시오). Opulence 2.0의 작업을 새로운 GitHub 리포지토리로 이식하기로 결정하고 Aphiria가 탄생했습니다.


역사 수업에 감사드립니다. 이제 Aphiria는 무엇입니까? 


Aphiria는 간단하지만 확장 가능한 PHP 용 REST API 프레임 워크입니다. 즉, 기본 모델 클래스를 확장 할 필요 없이 응용 프로그램 작성에 집중할 수 있습니다.


ASP.NET Core와 마찬가지로 Aphiria는 POPO의 콘텐츠 협상 (즉, 클라이언트가 전송하고 다시 요청하는 형식 및 언어 파악)을 자동으로 수행합니다. 따라서 클라이언트가 요청 본문에 XML을 전송하지만 응답 본문에 JSON을 다시 원하면 Aphiria는 요청 XML을 사용자가 지정한 모델로 자동으로 역 직렬화 하고 응답 모델을 JSON으로 직렬화 합니다.


위의 .NET 예제에 해당하는 Aphiria를 살펴 보겠습니다.


<?php

// Create an endpoint for retrieving a user
class UserController extends Controller
{
    public function __construct(private IUserService $users) {}

    #[Get('/users/:id')]
    public function getUserById(int $id): User
    {
        return $this->users->getUserById($id);
    }
}

class UserServiceBinder extends Binder
{
    public function bind(IContainer $container): void
    {
        $container->bindClass(IUserService::class, SqlUserService::class);
    }
}

class App implements IModule
{
    public function build(IApplicationBuilder $appBuilder): void
    {
        // Register the middleware and the dependency injection binder
        $appBuilder->withGlobalMiddleware($appBuilder, AuthMiddleware::class)
            ->withBinders($appBuilder, new UserServiceBinder());
    }
}


31 줄의 표현 구문으로 컨트롤러를 작성하고 "바인더"를 통해 종속성 주입을 구성하고 글로벌 미들웨어를 등록 할 수 있습니다. Aphiria는 "모듈"(도메인의 덩어리) 및 "구성 요소"(모듈간에 공유되는 앱 부분)의 개념을 중심으로 구성됩니다.

각 모듈은 바인더, 미들웨어, 경로 (속성을 사용하지 않는 경우), 예외-응답 매핑, 유효성 검사 규칙 및 콘솔 명령과 같은 구성 요소에서 필요한 모든 것을 등록 할 수 있습니다. 자신 만의 구성 요소를 작성할 수도 있습니다. 그런 다음 앱에 모듈을 플러그 앤 플레이 하기 만하면 됩니다.


Aphiria에는 어떤 기능이 있습니까? 


Aphiria에는 어떤 기능이 없습니까? 


Aphiria는 REST API를 작성하는 데 중점을 두고 있습니다. 따라서 다음을 제공하지 않습니다.


  • ORM 또는 데이터베이스 래퍼
  • 템플릿 언어
  • 사용자 지정 인증 또는 권한 부여 논리
  • 기본 PSR-7 지원 (이유 알아보기), 어댑터가 제공됨

그러나 이러한 작업을 수행하기 위해 Aphiria 앱에 원하는 타사 라이브러리를 통합 할 수 있습니다.


X가 아닌 Aphiria를 사용해야 하는 이유는 무엇입니까? 


각 프레임 워크는 장단점이 있는 도구입니다. 현재 제품에서 마음에 들지 않은 점은 다음과 같습니다.

  • 프레임 워크가 모두 스택에 있을 때만 가장 잘 작동하는 경우
  • 앱 구성과 같은 가장 간단한 작업을 수행하기 위한 표현력이 없거나 장황한 구문
  • 마법이 많아서 내부에서 일어나는 일을 파악하기 어렵게 만듭니다.

분명히 편견이 있지만 REST API 개발과 관련하여 Aphiria가 인기 있는 PHP 프레임 워크 중 최고의 개발자 경험을 제공한다고 생각합니다. 여기에서 Aphiria와 다른 프레임 워크를 비교하여 더 자세히 살펴 보았습니다.


당신은 내 관심을 불러 일으켰습니다. 어떻게 시작합니까? 


Aphiria는 Composer를 통해 빠르게 시작하고 실행하는 데 도움이 되는 스켈레톤 앱을 제공합니다. 전체 프레임 워크 대신 개별 라이브러리를 사용하려는 경우 가능합니다. 기여하고 싶으신가요?

기여 지침을 읽고 해결해야 할 몇 가지 좋은 문제를 확인하십시오.

멋진 기능에 대한 아이디어가 있습니까? 그것에 대한 문제를 만듭니다. 도움을 요청하거나 커뮤니티의 다른 사람들과 연결하고 싶으십니까?

GitHub 토론을 확인하세요.


대부분의 다른 오픈 소스 프로젝트 작성자와 마찬가지로 저는 Aphiria를 구축하고 유지하는 데 엄청난 자유 시간을 보냈습니다. 몇 달러를 아끼 실 수 있다면 항상 GitHub 후원에 감사드립니다. 할 수 없더라도 걱정하지 마세요.


https://davidbyoung.medium.com/a-new-framework-for-php-8-0-aphiria-715f03608db8