rest - Yii2将邮递员请求重定向到api rest中的不同路由
问题描述
我正在使用 Yii2 制作的 api 中的邮递员访问路线,但我在对应于该路线的操作中插入的代码不起作用。按照请求打印:
请求返回并不意味着是图像中的那个,因为我在“创建”操作中输入的代码是这样的:
<?php
namespace app\modules\api\controllers;
use Yii;
use app\modules\pesquisa_mercado\models\PontoDaPesquisa;
class PesquisaPontoController extends \yii\rest\ActiveController
{
public $modelClass = 'app\modules\pesquisa_mercado\models\PesquisaPonto';
public function behaviors()
{
$behaviors = parent::behaviors();
return $behaviors + [
[
'class' => \yii\filters\auth\HttpBearerAuth::className(),
'except' => ['options'],
],
'verbs' => [
'class' => \app\modules\api\behaviors\Verbcheck::className(),
'actions' => [
'index' => ['GET'],
'create' => ['POST'],
'update' => ['PUT'],
'view' => ['GET'],
'delete' => ['DELETE'],
'finalizar-pesquisa' => ['POST'],
],
],
];
}
public function actions()
{
$actions = parent::actions();
unset($actions['update']);
return $actions;
}
public function actionCreate()
{
die("Test"); // test inserted here
}
}
也就是说,返回是“测试”。由于某种我不知道的原因,路线被重定向到另一个地方。
我还发现请求通过了 PesquisaPonto 模型中的 getLinks () 方法:
<?php
namespace app\modules\pesquisa_mercado\models;
class PesquisaPonto extends \yii\db\ActiveRecord implements \yii\web\Linkable
{
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%pesquisa_ponto}}';
}
/**
* @inheritdoc
*/
public function getLinks() // the requisition also passes through here!
{
return [
Link::REL_SELF => Url::to(['pesquisa-ponto/view', 'id' => $this->id], true),
'index' => Url::to(['pesquisa-ponto'], true)
];
}
}
同样按照 urlManager 的配置:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => true,
'rules' => [
// Pontos de Pesquisa
// api/pesquisa-ponto
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'api/pesquisa-ponto'
],
'pluralize' => false,
],
],
]
我仍然没有找到 Yii2 重定向路由并且不允许邮递员访问“创建”操作的原因......
解决方案
中的actions()
方法yii\rest\ActiveController
看起来像这样
public function actions()
{
return [
// ...
'create' => [
'class' => 'yii\rest\CreateAction',
'modelClass' => $this->modelClass,
'checkAccess' => [$this, 'checkAccess'],
'scenario' => $this->createScenario,
],
// ...
];
}
在您的actions()
方法实现中,您仅删除操作配置,update
但操作配置create
保持不变。这意味着该操作yii\rest\CreateAction
不是从actionCreate()
控制器的方法运行的。
要从中运行操作,PesquisaPontoController::actionCreate()
您还必须取消设置create
操作的配置。
public function actions()
{
$actions = parent::actions();
unset($actions['update'], $actions['create']);
return $actions;
}
推荐阅读
- python - Python:从 RestAPI 下载 zip 文件
- mips - MIPS双点
- docker - 在archlinux的docker中强制更改密码但失败
- java - 运行程序并观察输出为:55 4 50 19
- botframework - 如何在 SFB 通道的节点 js 中为机器人框架添加打字指示器
- azure - Web 应用程序机器人正在发送消息“抱歉,我的机器人代码有问题”
- java - Hikari 无法获取 JDBC 连接
- google-cloud-platform - google storage transfer api - 无法获取 Google Cloud Storage (GCS) 存储桶的位置
- python - 芹菜:链中的和弦和组无法正常工作
- python - Python poppler qt4安装失败:不支持的Qt版本(5.6.2)