Yii2 将邮递员请求重定向到 api 中的其他路由
Yii2 redirecting postman request to a different route in the api rest
我在 Yii2 制作的 api 中访问了邮递员的路线,但是我在与该路线对应的操作中插入的代码不起作用。按照要求打印:
postman-request-print
请求 return 不是图片中的请求,因为我在 'create' 操作中输入的代码是这样的:
<?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
}
}
也就是说,return 应该是 'Test'。由于某种我不知道的原因,路线被重定向到另一个地方。
我还发现请求通过 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重定向路由不让邮递员访问'create'动作的原因...
yii\rest\ActiveController
中的 actions()
方法如下所示
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;
}
我在 Yii2 制作的 api 中访问了邮递员的路线,但是我在与该路线对应的操作中插入的代码不起作用。按照要求打印:
postman-request-print
请求 return 不是图片中的请求,因为我在 'create' 操作中输入的代码是这样的:
<?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
}
}
也就是说,return 应该是 'Test'。由于某种我不知道的原因,路线被重定向到另一个地方。
我还发现请求通过 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重定向路由不让邮递员访问'create'动作的原因...
yii\rest\ActiveController
中的 actions()
方法如下所示
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;
}