Yii2 如何为RESTAPI检查Yi2中的输入数据?

Yii2 如何为RESTAPI检查Yi2中的输入数据?,yii2,Yii2,如何为RESTAPI检查Yi2中的输入数据 以下是如何在非REST API中完成的: 控制器 <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\Index__GET; class SiteController extends Controller { public function actionIndex($ch_name_url = null)

如何为RESTAPI检查Yi2中的输入数据

以下是如何在非REST API中完成的:

控制器

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Index__GET;

class SiteController extends Controller
{
 
      public function actionIndex($ch_name_url = null)
      {
        $model = new Index__GET();
        $model->ch_name_url = $ch_name_url;

           if($model->validate()){ 
               return $this->render('index');
           }   

      }
}
namespace app\controllers;

use yii\rest\ActiveController;

class IndexController extends ActiveController
{
   public $modelClass = 'app\models\Index__GET';
}
型号

<?php
namespace app\models;

use Yii;
use yii\base\Model;


class Index__GET extends Model
{

    public $ch_name_url;

    public function rules()
    {
        return [
            ['ch_name_url', 'trim'],


            ['ch_name_url', 'required'],

        ];
    }
}
<?php
namespace app\models;

use Yii;
use yii\db\ActiveRecord;

class Index__GET extends ActiveRecord
{
    public $id;
    public $ch_name_url;
    public $email;
    
    public static function tableName()
    {
        return 'user';
    }

    public function fields()
    {
        return ['id', 'ch_name_url', 'email'];
    }
    
    public function rules()
    {
        return [

            [['id', 'ch_name_url'], 'required'],
        ];
    }
}

只需创建一个从
\yii\rest\ActiveController
扩展的控制器,然后
验证
将自动运行。这样做:

namespace-app\controllers;
使用yii\rest\ActiveController;
类IndexController扩展了ActiveController
{
public$modelClass='app\models\Index\uuuu GET';
}
当您调用
$model->save()
时,默认情况下会调用
$model->validate()
,但如果您需要在操作中验证模型,请像在问题示例代码中那样执行

请记住,REST中的操作与普通调用略有不同,通常不需要
actionIndex


有关更多信息,请按照原始文档进行操作:

只需从
\yii\rest\ActiveController
创建一个扩展控制器,然后
验证将自动运行。这样做:

namespace-app\controllers;
使用yii\rest\ActiveController;
类IndexController扩展了ActiveController
{
public$modelClass='app\models\Index\uuuu GET';
}
当您调用
$model->save()
时,默认情况下会调用
$model->validate()
,但如果您需要在操作中验证模型,请像在问题示例代码中那样执行

请记住,REST中的操作与普通调用略有不同,通常不需要
actionIndex


有关更多信息,请遵循原始文档:

谢谢!我编辑我的问题。请读。我希望GET请求包含两个必填字段。如果我使用带参数的GET请求,则不会验证数据。@TamaraSec然后您必须更新
规则和
标记
查看此帖子并遵循此操作。但验证无效。我在modele
['id','in','range'=>[0,5]]中添加了规则,
并发出GET请求
/api/v1/user/1
我得到数据。这种验证不应该在规则中进行!规则用于验证模型是否有效。您想要的是过滤可能的结果。看看Yii2过滤器。您想要的是过滤可能的结果。-->否。我想在查询数据库之前验证数据。谢谢!我编辑我的问题。请读。我希望GET请求包含两个必填字段。如果我使用带参数的GET请求,则不会验证数据。@TamaraSec然后您必须更新
规则和
标记
查看此帖子并遵循此操作。但验证无效。我在modele
['id','in','range'=>[0,5]]中添加了规则,
并发出GET请求
/api/v1/user/1
我得到数据。这种验证不应该在规则中进行!规则用于验证模型是否有效。您想要的是过滤可能的结果。看看Yii2过滤器。您想要的是过滤可能的结果。-->否。我想在查询数据库之前验证数据。ActiveController的默认actionIndex和actionView不调用
$model->validate()
,因此不使用规则。例如,在您的示例中运行的代码是,如果您选中它,您将看到它只调用checkAccess,如果为true,则返回模型。如果你想检查规则,你需要实现你自己的方法。@RaulSauco谢谢!ActiveController的默认actionIndex和actionView不调用
$model->validate()
,因此不使用规则。例如,在您的示例中运行的代码是,如果您选中它,您将看到它只调用checkAccess,如果为true,则返回模型。如果你想检查规则,你需要实现你自己的方法。@RaulSauco谢谢!