프레임워크: 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이 어떤 모듈에 있는지 분석하는 것이 좋습니다. , 환영합니다 공유
오류 표시 형식은 무엇을 의미하나요? 다른 오류 페이지가 있나요?