這邊是我 models 的 code
namespace app\models;
use Yii;
use app\models\Api;
class Order_api extends Api
{
public $account_id;
public $create_date;
public $auth_code;
public function rules()
{
return [
[['account_id','auth_code'], 'required']
];
}
public function check_params($standard ,$data)
{
return parent::check_params($standard ,$data);
}
}
這邊是 controller 的 code
public function actionTest()
{
$app_order = [
'account_id' => '1',
'create_date' => '2',
'auth_code' => '3'
];
$a = new \app\models\Order_api;
$a->attributes = $app_order; <====== 這邊為什麼我把 models 的 public rules() 整個function 移除
//$a->account_id = '1';
$a->attributes;
var_dump($a); <====== 這邊印出來的卻是 每個成員變數都是 NULL
}
有查看 yii\base\Models attributes() 內部的寫法 他也指示用 ReflectionClass 反映有哪些 public name 而已
想請教 $a->attributes = $app_order; 當我的 models 有 public rules(){ … } 的時候
var_dump($a); 的成員變數是有被賦予值得,但我移除 public rules(){ … }之後成員變數卻都是 NULL
想知道他流程是怎麼跑的為什麼只有 NULL 而沒有值 !!
剛剛沒有看 _set && _get 現在知道怎麼設定了~~~ 希望也可以分享您知道的流程給我參考
$a->attributes = $app_order;
实际调用的是 $a->setAttributes($app_order);
而调用setAttributes
方法赋值时, 默认只加载safaAttributes
;
所谓的safeAttributes
, 指的就是 : 在rules
中有声明验证规则的attribute
;
这就是rules
移掉, 赋值后全是null
的原因
所以 : 在rules
里面把需要的属性都声明到, 即便是safe
也可以.