runl_li 2016-03-28 11:26:16 10881次浏览 6条回复 1 0 0

以下为model中的代码,自定义的validateShopPrice方法不起作用,请问是什么原因啊

namespace common\models;
use Yii;
use yii\web\UploadedFile;
use common\tools\UploadFile;
class Goods extends \core\base\BaseActiveRecord
{
    public $attribute;
    public static function tableName()
    {
        return '{{%goods}}';
    }
    public function beforeSave($insert){
        $uploadFile = UploadFile::uploadFiles("Goods[middle_img]","goodsimg");
        if($uploadFile!=null){
            $this->middle_img = $uploadFile['geturl'].$uploadFile['new_name'];
            echo $this->middle_img;
        }
        return parent::beforeSave($insert);
    }  
    public function rules()
    {
        return [
            [['goods_name', ], 'required','message'=>'商品名称不能为空'],
            ['shop_price','validateShopPrice','skipOnError' => false],
        ];
    }
    public function validateShopPrice($attribute, $params)
    {
      if (($this->$attribute)<1000){
           $this->addError($attribute,'价格应大于1000');
           return false;
      }
      return true;
    }
  • 回复于 2016-03-28 17:31 举报

    给个debug思路,直接 $this->addError($attribute,'价格应大于1000'); 跑这行看能否看到错误提示。

  • 回复于 2016-04-06 21:39 举报

    我感觉Model这里没有问题,关键在于 controller 这里的写法:

    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        return $this->goBack();
    }
    return $this->render('create', [
        'model' => $model,
    ]);
    ```
    
    这里的 return $this->goBack();
    可以参考下 SiteController里的actionLogin()方法.
    
  • 回复于 2016-05-28 14:42 举报

    加上

    
    ['shop_price','validateShopPrice','skipOnError' => false, 'skipOnEmpty'=>false],
    

    试试,值为空的时候不允许跳过验证

    1 条回复
    回复于 2019-05-20 14:03 回复

    这个是正确的

    觉得很赞
  • 回复于 2018-04-28 10:48 举报

    同样的问题,请问贴主后续是啥

  • 回复于 2018-04-28 11:26 举报

    答案是,提交的时候 才会触发,而不是输入完以后就触发..

您需要登录后才可以回复。登录 | 立即注册