首页 > 解决方案 > 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 重定向路由并且不允许邮递员访问“创建”操作的原因......

标签: restapiyii2postman

解决方案


中的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;
}

推荐阅读