php - 根据场景设置默认模型值

标签 php yii2

我不明白为什么设置默认值对我不起作用。

这是我的 Controller :

class QueryController extends ActiveController

{
    public $modelClass = 'app\models\Query';
    public $createScenario = 'restCreate';
    public $updateScenario = 'restUpdate';

我没有覆盖默认的 createAction 方法。

型号:

 class Query extends ActiveRecord 
{public function rules()
{
    return [
        [['userId', 'name', 'created', 'isOneTime', 'isArchived', 'settings', 'engine'], 'required'],
        [['userId'], 'integer'],
        [['name', 'settings', 'schedule'], 'string'],
        [['created', 'lastUpdate'], 'safe'],
        [['isOneTime', 'isArchived', 'isApi', 'valid'], 'boolean'],
        [['state', 'engine'], 'string', 'max' => 160],
        [['isApi'], 'default', 'value'=> false],
        [['isApi'], 'default', 'value'=> true, 'on' => 'restCreate']
    ];
} 
public function scenarios()
    {
            $scenarios = parent::scenarios();
            $scenarios['restCreate'] = ['name', 'state', 'isApi', 'isOneTime', 'settings', 'schedule'];
            $scenarios['restUpdate'] = ['name', 'state', 'isOneTime', 'settings', 'schedule' ];
        return $scenarios;
    }

当我通过 Rest Controller 创建一个新条目时,它应该默认设置 isApi = true,但它不会以这种方式工作。如何根据场景分配默认模型值?

最佳答案

你应该交换这个规则:
[['isApi'], 'default', 'value'=> false]
[['isApi'], 'default', 'value'=> true, 'on' => 'restCreate']

您必须这样做,因为 DefaultValueValidator 仅对单个字段应用一次。此验证器仅在字段的值为空时运行。有这张支票:\yii\validators\DefaultValueValidator::validateAttribute()

模型一个接一个地运行验证器。 [['isApi'], 'default', 'value'=> false] 将字段的值设置为 false[['isApi'], 'default', 'value'=> true, 'on' => 'restCreate'] 看到值不为空并跳过。

关于php - 根据场景设置默认模型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34345314/

相关文章:

php - 使用 Android WebService 客户端和 PHP 服务器传递参数时出现问题

php - 在 Laravel 4 中找不到库类

php - mysqli_result 类实际获取的数据存在于何处?

php - ParseError语法错误,文件意外结束

php - 有没有办法用 yii\rbac\PhpManager 刷新 Yii2 中缓存的 rbac 项?

php - 在 Yii2 中连接表

yii2 抛出错误而不是重定向到登录页面

php - 如何在 wordpress 中使用帖子 ID 获取帖子缩略图?

php - 如何在 php 包含文件中设置 html 内容的样式?

php - 如何在 yii2 中与 mysql 数据库进行区分大小写的 where() 'in' 匹配