다중 애플리케이션

때때로 하나의 프로젝트는 여러 개의 하위 프로젝트로 나눌 수 있습니다. 예를 들어, 하나의 쇼핑몰 프로젝트는 쇼핑몰 메인 프로젝트, 쇼핑몰 API 인터페이스, 쇼핑몰 관리 백엔드의 3개 하위 프로젝트로 나눌 수 있으며, 이들은 모두 동일한 데이터베이스 구성을 사용합니다.

webman을 사용하면 앱 디렉토리를 다음과 같이 계획할 수 있습니다:

app
├── shop
│   ├── controller
│   ├── model
│   └── view
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

주소 http://127.0.0.1:8787/shop/{컨트롤러}/{메서드}에 접근하면 app/shop/controller 아래의 컨트롤러와 메서드에 접근합니다.

주소 http://127.0.0.1:8787/api/{컨트롤러}/{메서드}에 접근하면 app/api/controller 아래의 컨트롤러와 메서드에 접근합니다.

주소 http://127.0.0.1:8787/admin/{컨트롤러}/{메서드}에 접근하면 app/admin/controller 아래의 컨트롤러와 메서드에 접근합니다.

webman에서는 다음과 같이 앱 디렉토리를 계획할 수도 있습니다.

app
├── controller
├── model
├── view
│
├── api
│   ├── controller
│   └── model
└── admin
    ├── controller
    ├── model
    └── view

이렇게 하면 주소 http://127.0.0.1:8787/{컨트롤러}/{메서드}에 접근할 때 app/controller 아래의 컨트롤러와 메서드에 접근하게 됩니다. 경로가 apiadmin으로 시작하면 해당 디렉토리의 컨트롤러와 메서드에 접근합니다.

다중 애플리케이션의 경우 클래스의 네임스페이스는 psr4에 따라야 하며, 예를 들어 app/api/controller/FooController.php 파일은 다음과 유사합니다:

<?php
namespace app\api\controller;

use support\Request;

class FooController
{

}

다중 애플리케이션 미들웨어 구성

때때로 서로 다른 애플리케이션에 대해 서로 다른 미들웨어를 구성하고 싶을 수 있습니다. 예를 들어, api 애플리케이션은 CORS 미들웨어가 필요할 수 있고, admin은 관리자의 로그인 상태를 확인하는 미들웨어가 필요할 수 있습니다. 따라서 config/middleware.php는 다음과 유사할 수 있습니다:

return [
    // 전역 미들웨어
    '' => [
        support\middleware\AuthCheck::class,
    ],
    // api 애플리케이션 미들웨어
    'api' => [
         support\middleware\AccessControl::class,
     ],
    // admin 애플리케이션 미들웨어
    'admin' => [
         support\middleware\AdminAuthCheck::class,
         support\middleware\SomeOtherClass::class,
    ],
];

위의 미들웨어는 실제로 존재하지 않을 수 있으며, 여기서는 애플리케이션별로 미들웨어를 구성하는 방법을 설명하기 위한 예시입니다.

미들웨어 실행 순서는 전역 미들웨어 -> 애플리케이션 미들웨어입니다.

미들웨어 개발에 대한 참고 사항은 미들웨어 장을 참조하십시오.

다중 애플리케이션 예외 처리 구성

마찬가지로, 서로 다른 애플리케이션에 대해 서로 다른 예외 처리 클래스를 구성하고 싶을 수 있습니다. 예를 들어, shop 애플리케이션에서 예외가 발생할 경우 친숙한 알림 페이지를 제공하고, api 애플리케이션에서 예외가 발생할 경우 페이지가 아닌 JSON 문자열을 반환하고자 할 수 있습니다. 서로 다른 애플리케이션에 대해 서로 다른 예외 처리 클래스를 구성하는 파일 config/exception.php는 다음과 유사합니다:

return [
    'shop' => support\exception\Handler::class,
    'api' => support\exception\ApiHandler::class,
];

미들웨어와는 달리 각 애플리케이션은 단 하나의 예외 처리 클래스만 구성할 수 있습니다.

위의 예외 처리 클래스는 실제로 존재하지 않을 수 있으며, 여기서는 애플리케이션별로 예외 처리를 구성하는 방법을 설명하기 위한 예시입니다.

예외 처리 개발에 대한 참고 사항은 예외 처리 장을 참조하십시오.