Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Yii2高级模板中发布操作restapi_Php_Api_Vue.js_Yii2_Yii2 Advanced App - Fatal编程技术网

Php 如何在Yii2高级模板中发布操作restapi

Php 如何在Yii2高级模板中发布操作restapi,php,api,vue.js,yii2,yii2-advanced-app,Php,Api,Vue.js,Yii2,Yii2 Advanced App,我有个问题想问你们:)我正试图在我的yii2高级模板上添加一个API,因为我想让我的wordpress网站向我的yii2应用程序发送数据。 我的系统:1)Yii2高级模板2)wordpress网站3)我的wordpress插件与vuejs和axios通过API在我的Yii2应用程序中创建新条目 所以我allready做了: common/config/main.php(当我使用AccessController时,我添加了orders/*以允许它) frontend/config/main.php

我有个问题想问你们:)我正试图在我的yii2高级模板上添加一个API,因为我想让我的wordpress网站向我的yii2应用程序发送数据。 我的系统:1)Yii2高级模板2)wordpress网站3)我的wordpress插件与vuejs和axios通过API在我的Yii2应用程序中创建新条目 所以我allready做了: common/config/main.php(当我使用AccessController时,我添加了orders/*以允许它)

frontend/config/main.php

'components' => [
'request' => [
    'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ],
和(在urlManager数组中)

然后我的控制器:

<?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';
   }


}


}
答案是

{"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请求
的形式发送请求,而
控制器中的
操作
需要一个
POST请求

在左侧的POSTMAN客户端中,有一个选择器,您可以在其中选择正在执行的请求类型

您得到的第二个错误是,一旦您删除POST的必要条件,get请求将进入
操作
,并转到此处:

} elseif (!\Yii::$app->request->isPost) {
   $model->load(Yii::$app->request->get());
}
并尝试使用
GET
参数中的数据加载模型,但失败了,因为默认的
$model->load()
无法知道如何映射GET请求中的数据

在任何情况下(获取或发布)
$model->load()
都不会工作,因为如果您检查load()函数,您会发现它会在数组中搜索对象模态名称以加载参数,因此您必须执行以下操作:

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

但是对于每个参数,您在stringify
['Orders'=>['livre'=>'Larbre']]
的结果中看到的奇怪字符,问题是您在
邮递员中发送请求作为
获取请求
,而
控制器中的
操作
需要
发布请求

在左侧的POSTMAN客户端中,有一个选择器,您可以在其中选择正在执行的请求类型

您得到的第二个错误是,一旦您删除POST的必要条件,get请求将进入
操作
,并转到此处:

} elseif (!\Yii::$app->request->isPost) {
   $model->load(Yii::$app->request->get());
}
并尝试使用
GET
参数中的数据加载模型,但失败了,因为默认的
$model->load()
无法知道如何映射GET请求中的数据

在任何情况下(获取或发布)
$model->load()
都不会工作,因为如果您检查load()函数,您会发现它会在数组中搜索对象模态名称以加载参数,因此您必须执行以下操作:

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

但是对于每个参数,您在stringify结果中看到的奇怪字符
['Orders'=>['livre'=>'Larbre']]

嘿,谢谢您的回答!但是我是用POST而不是GET从邮递员那里发送的,所以我不明白你怎么说第一个错误,因为我说,用GET,我收到记录,没问题,但是当我用邮递员发送邮件时,我得到了我写的两件事。当我愚蠢地从后端控制器复制/粘贴我的create函数时,我改变了它(我修改了我的帖子,以便看得更清楚)但是我还是收到了同样的错误嘿,谢谢你的回答!但是我是用POST而不是get发送邮件的,所以我不明白你怎么说第一个错误,因为我说,用get,我收到了记录,没问题,但是当我用POST发送邮件时,我得到了我写的两件事。我愚蠢地复制/粘贴了我的create f从我的后端控制器,我改变了它(我修改了我的文章,以便更清楚地看到),但我仍然得到相同的错误
http://localhost:8888/SD/sdms/orders/create?Orders%5Blivre%5=L'Arbre