Heim >Backend-Entwicklung >PHP-Tutorial >Wie werden bei der Entwicklung der Restful API in Yii2 Fehlerformate für verschiedene Module angezeigt?

Wie werden bei der Entwicklung der Restful API in Yii2 Fehlerformate für verschiedene Module angezeigt?

WBOY
WBOYOriginal
2016-08-04 09:19:47992Durchsuche

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.phpDer 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?

Antwortinhalt:

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.phpDer 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?

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn