Framework: Yii2 Adv
Die Verzeichnisstruktur ist wie folgt
<code>api/ models/ web/ modules/ v1/ controllers/ ... v2/ controllers/ ... config/ main.php ...</code>
Jetzt plane ich, ein anderes Fehleranzeigeformat für die v2-Version der API zu verwenden, also habe ich das on beforeSend
-Ereignis zur Antwortkomponente hinzugefügt, wie im Dokument beschrieben, aber in der Praxis habe ich festgestellt, dass das Ereignis darin festgelegt wird Diese Methode kann nur für die Anwendungskomponente funktionieren. config/main.php
Der Code lautet wie folgt:
<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>
Wenn Sie die Methode direkt im Dokument http://www.yiiframework.com/d... verwenden, funktioniert sie sowohl auf v1- als auch auf v2-Modulen, was dazu führt, dass die von v1 verwendete Schnittstelle nicht mit der App kompatibel ist .
Wenn Sie vorhaben, Response nur auf ein separates Modul festzulegen, welche anderen Möglichkeiten gibt es, dies zu implementieren?
Framework: Yii2 Adv
Die Verzeichnisstruktur ist wie folgt
<code>api/ models/ web/ modules/ v1/ controllers/ ... v2/ controllers/ ... config/ main.php ...</code>
Jetzt plane ich, ein anderes Fehleranzeigeformat für die v2-Version der API zu verwenden, also habe ich das on beforeSend
-Ereignis zur Antwortkomponente hinzugefügt, wie im Dokument beschrieben, aber in der Praxis habe ich festgestellt, dass das Ereignis darin festgelegt wird Diese Methode kann nur für die Anwendungskomponente funktionieren. config/main.php
Der Code lautet wie folgt:
<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>
Wenn Sie die Methode im Dokument http://www.yiiframework.com/d... direkt verwenden, funktioniert sie sowohl auf v1- als auch auf v2-Modulen, was dazu führt, dass die von v1 verwendete Schnittstelle nicht mit der App kompatibel ist .
Wenn Sie vorhaben, Response nur auf ein separates Modul festzulegen, welche anderen Möglichkeiten gibt es, dies zu implementieren?
Es ist machbar.
In der Module::init()-Methode in Module.php jedes Moduls binden Sie einfach den Handler an Response::EVENT_BEFORE_SEND.
Sie müssen auch den modulspezifischen [errorHandler] in Module.php binden.
Details entnehmen Sie bitte der Modul- und Veranstaltungsdokumentation
Yii2 sollte dies nicht unterstützen, Sie können darüber nachdenken, welches Modul die URL im Fehlerbehandler enthält. Dies ist natürlich eine relativ frustrierende Möglichkeit, es zu implementieren , willkommen Teilen
Was bedeutet das Fehleranzeigeformat? Unterschiedliche Fehlerseiten?