2015-10-02 12:13:37 2692次浏览 1条回答 0 悬赏 80 金钱

這邊是我 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 現在知道怎麼設定了~~~ 希望也可以分享您知道的流程給我參考

最佳答案

  • 500miles 发布于 2015-10-02 19:56 举报

    $a->attributes = $app_order; 实际调用的是 $a->setAttributes($app_order);

    而调用setAttributes方法赋值时, 默认只加载safaAttributes;

    所谓的safeAttributes, 指的就是 : 在rules中有声明验证规则的attribute;

    这就是rules移掉, 赋值后全是null的原因

    所以 : 在rules里面把需要的属性都声明到, 即便是safe也可以.

    1 条回复
    回复于 2015-10-02 21:13 回复

    恩恩 我看完 code 後也是這樣想!! 後來發現 setAtrributes 有 $safeOnly 可以設定!!
    設定成 false 他也不會去管 rules 了
    非常感謝您的說明 讓我的認知又更清楚!!

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
bryson
副总裁

bryson Taipei

注册时间:2015-07-22
最后登录:2017-04-03
在线时长:84小时54分
  • 粉丝19
  • 金钱4885
  • 威望230
  • 积分8025

热门问题