【问题标题】:Yii2 non-DB (or virtual) attribute isn't populated during massive assignment?Yii2 非数据库(或虚拟)属性在大规模分配期间未填充?
【发布时间】:2016-02-21 23:30:33
【问题描述】:

我已经定义了一个虚拟属性:

class ContactForm extends Model {

    public $name; // is not a DB field

我注意到它在大量分配期间没有填充(在提交表单后,$model->load($_POST))。它可以以某种方式与数据库属性一起填充吗?还是我做错了一些没有填充但应该填充的错误?谢谢!

【问题讨论】:

  • 你试过用 $model->load(Yii::$app->request->post()) 分配模型属性吗?
  • $model->load($_POST) 有什么区别?
  • 以普通形式查看https://github.com/yiisoft/yii2/blob/master/framework/web/Request.php#L453 可能(?)没有区别,但它是Yii2 的做事方式。如果您有 application/json 请求,则存在差异。

标签: yii2 mass-assignment virtual-attribute


【解决方案1】:

文档:Massive Assignments

与普通模型一样,Active Record 实例也享有海量分配功能。使用此功能,您可以在单个 PHP 语句中为 Active Record 实例的多个属性赋值,如下所示。请记住,只有安全的属性才能被大量分配。

文档:Safe Attributes

出于这个原因,提供了一个别名为 safe 的特殊验证器,以便您可以声明一个属性是安全的,而无需实际验证它。例如,以下规则声明 title 和 description 都是安全属性。

如果您没有任何验证需求,您必须对您的属性进行某种验证 - 将其定义为 safe

public function rules()
{
    return [
        [['name'], 'safe'],
    ];
}

【讨论】:

  • 疯了!有用!让我感到奇怪的是,为什么我们不会成为警告或错误消息。某物。不过没关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多