>  기사  >  백엔드 개발  >  Yii2에서 Restful API를 개발할 때 다양한 모듈의 오류 형식을 표시하는 방법은 무엇입니까?

Yii2에서 Restful API를 개발할 때 다양한 모듈의 오류 형식을 표시하는 방법은 무엇입니까?

WBOY
WBOY원래의
2016-08-04 09:19:47973검색

프레임워크: Yii2 Adv
디렉토리 구조는 다음과 같습니다

<code>api/
    models/
    web/
    modules/
        v1/
            controllers/
            ...
        v2/
            controllers/
            ...
    config/
        main.php
        ...</code>

이제 API v2 버전에서는 다른 오류 표시 형식을 사용할 계획이어서 문서에 설명된 대로 응답 구성 요소에 on beforeSend 이벤트를 추가했지만 실제로는 이 이벤트를 다음에서 설정하는 것으로 나타났습니다. 방법은 애플리케이션 구성요소에 대해서만 작동할 수 있습니다.
config/main.php코드는 다음과 같습니다.

<code>return [
    'id' => 'app-api',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log',],
    'modules' => [
        'v1' => [
            'class' => 'api\modules\v1\Module',
            'basePath' => '@app/modules/v1',
            'components' => [
            ]
        ],
        'v2' => [
            'class' => 'api\modules\v2\Module',
            'basePath' => '@app/modules/v2',
            'components' => [
                'response' => [
                    'class' => \yii\web\Response::class,
                    'on beforeSend' => function ($event) {
                        /** @var \yii\web\Response $res */
                        $res = $event->sender;
                        if (!$res->isSuccessful) {
//                            do something here...
//                            ...
                        }
                    }
                ],
            ],
        ]
    ],
    ...</code>

문서 http://www.yiiframework.com/d...에 있는 메소드를 직접 사용하면 v1과 v2 모듈 모두에서 작동하므로 v1에서 사용하는 인터페이스가 앱과 호환되지 않습니다. .
Response를 별도의 모듈로만 설정하려는 경우, 다른 구현 방법은 무엇입니까?

답글 내용:

프레임워크: Yii2 Adv
디렉토리 구조는 다음과 같습니다

<code>api/
    models/
    web/
    modules/
        v1/
            controllers/
            ...
        v2/
            controllers/
            ...
    config/
        main.php
        ...</code>

이제 API v2 버전에서는 다른 오류 표시 형식을 사용할 계획이어서 문서에 설명된 대로 응답 구성 요소에 on beforeSend 이벤트를 추가했지만 실제로는 이 이벤트를 다음에서 설정하는 것으로 나타났습니다. 방법은 애플리케이션 구성요소에 대해서만 작동할 수 있습니다.
config/main.php코드는 다음과 같습니다.

<code>return [
    'id' => 'app-api',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log',],
    'modules' => [
        'v1' => [
            'class' => 'api\modules\v1\Module',
            'basePath' => '@app/modules/v1',
            'components' => [
            ]
        ],
        'v2' => [
            'class' => 'api\modules\v2\Module',
            'basePath' => '@app/modules/v2',
            'components' => [
                'response' => [
                    'class' => \yii\web\Response::class,
                    'on beforeSend' => function ($event) {
                        /** @var \yii\web\Response $res */
                        $res = $event->sender;
                        if (!$res->isSuccessful) {
//                            do something here...
//                            ...
                        }
                    }
                ],
            ],
        ]
    ],
    ...</code>

문서 http://www.yiiframework.com/d...에 있는 메소드를 직접 사용하면 v1과 v2 모듈 모두에서 작동하므로 v1에서 사용하는 인터페이스가 앱과 호환되지 않습니다. .
Response를 별도의 모듈로만 설정하려는 경우, 다른 구현 방법은 무엇입니까?

가능합니다.

각 모듈의 Module.php에 있는 Module::init() 메서드에서 핸들러를 Response::EVENT_BEFORE_SEND에 바인딩하면 됩니다.

또한 Module.php에서 모듈별 [errorHandler]를 바인딩해야 합니다.

자세한 내용은 모듈 및 이벤트 문서를 참조하세요

Yii2는 이를 지원하지 않아야 합니다. 물론, 포스터가 더 나은 솔루션을 찾는 경우에는 URL이 어떤 모듈에 있는지 분석하는 것이 좋습니다. , 환영합니다 공유

오류 표시 형식은 무엇을 의미하나요? 다른 오류 페이지가 있나요?

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.