簡體   English   中英

如何在 Yii2 高級模板中發布動作 REST API

[英]How to POST action REST API in Yii2 Advanced Template

我有一個問題要問你們 :) 我正在嘗試在我的 yii2 高級模板上添加一個 API,因為我希望我的 wordpress 網站將數據發送到我的 yii2 應用程序。 我的系統:1)Yii2 高級模板 2)wordpress 網站 3)我的帶有 vuejs 和 axios 的 wordpress 插件通過 API 在我的 yii2 應用程序中創建一個新條目 所以我已經做了什么:common/config/main.php(因為我使用 AccessController ,我添加了訂單/*以允許它)

'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
    'orders/*',
],

前端/配置/main.php

'components' => [
'request' => [
    'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ],

和(在 urlManager 數組中)

['class'=>'yii\rest\UrlRule','controller'=>'Orders'],
[‘class'=>'yii\rest\UrlRule','controller'=>'Contacts']

然后我的控制器:

<?php
namespace frontend\controllers;
use yii\rest\ActiveController; use yii\filters\auth\HttpBasicAuth;
class OrdersController extends ActiveController {
public $modelClass = 'common\models\Vctorders';

public function behaviors()
{
$behaviors = parent::behaviors();

// remove authentication filter
$auth = $behaviors['authenticator'];
unset($behaviors['authenticator']);

// add CORS filter
$behaviors['corsFilter'] = [
    'class' => \yii\filters\Cors::className(),
];

// re-add authentication filter
$behaviors['authenticator'] = $auth;
// avoid authentication on CORS-pre-flight requests (HTTP OPTIONS method)
$behaviors['authenticator']['except'] = ['options'];

return $behaviors;
}

public function actions()
{
$actions = parent::actions();
unset($actions['create']);
unset($actions['update']);
unset($actions['delete']);
unset($actions['view']);
//unset($actions['index']);
return $actions;
}

protected function verbs(){
return [
    'create' => ['POST'],
    'new' => ['POST'],
    'update' => ['PUT', 'PATCH','POST'],
    'delete' => ['DELETE'],
    'view' => ['GET'],
    //'index'=>['GET'],
];
}


public function actionCreate()
{
    $model = new Vctorders();

    $model->date_creation = date('Y-m-d H:i:s',strtotime('now'));
    $model->etat = 0;
    if($model->save()){ 
      return 'OK';

   } else{
      return 'error';
   }


}


}

所以,我使用郵遞員: http://localhost:8888/SD/sdms/orders/我得到一個記錄,沒問題

但是當我使用以下內容進行 POST 時:

http://localhost:8888/SD/sdms/orders/create?livre=L'Arbre Musicien&langue=Allemand&nom=Perroud&prenom=LIttledave&nombre=2&npa=1221&pays=suisse&accept_pc=1&mail=post@post.ch&etat=1&message=lbablalbal&tel=01201201212

答案是

{"name":"Exception","message":"Class 'frontend\\controllers\\Vctorders' not found","code":0,"type":"Error","file":"/Applications/MAMP/htdocs/SD/sdms/frontend/controllers/OrdersController.php","line":58,"stack-trace":["#0 [internal function]: frontend\\controllers\\OrdersController->actionCreate()","#1 /Applications/MAMP/htdocs/SD/sdms/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)","#2 /Applications/MAMP/htdocs/SD/sdms/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)","#3 /Applications/MAMP/htdocs/SD/sdms/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('create', Array)","#4 /Applications/MAMP/htdocs/SD/sdms/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('orders/create', Array)","#5 /Applications/MAMP/htdocs/SD/sdms/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))","#6 /Applications/MAMP/htdocs/SD/sdms/frontend/web/index.php(17): yii\\base\\Application->run()","#7 {main}"]}

問題是您在POSTMAN中將您的請求作為GET REQUEST ,而您在CONTROLLERACTION需要POST REQUEST

在左側的 POSTMAN 客戶端中,有一個選擇器,您可以在其中選擇您正在執行的請求類型。

你得到的第二個錯誤是因為一旦你刪除了 POST 的必要條件,GET 請求就會進入action並轉到這里:

} elseif (!\Yii::$app->request->isPost) {
   $model->load(Yii::$app->request->get());
}

並嘗試使用GET參數中的數據加載模型,但失敗了,因為默認的$model->load()無法知道如何映射 GET 請求中的數據。

在任何情況下(GET 或 POST) $model->load()都不起作用,就好像您檢查 load() 函數一樣,您會發現它在數組中搜索 Object 模式名稱以加載參數,因此您必須這樣做:

http://localhost:8888/SD/sdms/orders/create?Orders%5Blivre%5=L'Arbre

但是對於每個參數,您在 stringify ['Orders' => ['livre' => 'Larbre']]的結果中看到的奇怪字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM