Yii2 的模型类中的 load() 方法是用来从请求中获取数据并加载到模型对象中的方法,其底层原理主要依赖于 PHP 的魔术方法 __set() 和 __get()。
当我们调用 $model->load($data) 方法时,实际上会调用 __call() 魔术方法,该方法会根据方法名 load 创建一个动态的 yii\base\ModelEvent 事件对象,并触发一个 EVENT_BEFORE_VALIDATE 事件,这样就可以在该事件的处理函数中对数据进行修改或预处理。
然后,该方法会遍历 $data 数组的每一个元素,并调用 $model->$attribute = $value 的形式来给模型对象的属性赋值,这里会调用到 __set() 魔术方法,从而把请求中的数据加载到模型对象中。
最后,load() 方法会再次触发一个 EVENT_AFTER_VALIDATE 事件,这样就可以在该事件的处理函数中对数据进行进一步的修改或验证。如果验证失败,该方法会返回 false,否则返回 true。