对字符串和文件yii2进行验证或验证

时间:2016-06-30 02:08:35

标签: yii2 yii2-advanced-app yii2-basic-app

我有两个字段messagefile,其中一个字段只是普通stringfile是一个图片。

我想创建一个验证器,它只允许用户发送这两个字段中的任何一个。

我尝试了when验证工具,但在when字段中$model->file始终为null,那么还有什么方法可以做或者用文件验证。

这是我的model代码

class Message extends \yii\db\ActiveRecord
{
    public $file;
    /**
    * @inheritdoc
    */
    public static function tableName()
    {
        return 'message';
    }

    /**
      * @inheritdoc
     */
    public function rules()
    {
    return [
    [['sender_id', 'receiver_id'], 'integer'],
    [['message'], 'string'],
    [['file'], 'file', 'extensions'=>'jpg, gif, png,jpeg'],
    /*['file', 'required', 'when' => function($model) {
        return $model->message == null;
    }],
    ['message', 'required', 'when' => function($model) {
        return $this->file->baseName == null;
    }]*/
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'sender_id' => 'Sender ID',
        'receiver_id' => 'Receiver ID',
        'message' => 'Message',
        'file' => 'Image (jpg/png)',
        'is_delivered' => 'Is Delivered',
        'is_notified' => 'Is Notified',
        'is_deleted' => 'Is Deleted',
        'created_date' => 'Created Date',
        'updated_date' => 'Updated Date',
        'is_group' => 'Is Group',
    ];
}
}

谢谢

1 个答案:

答案 0 :(得分:0)

这可以帮助你..

  

将您的规则定义为: -

public function rules()
{
    return [
        //Your Rules ......
        ['message' ,'string'],
        ['file' ,'file'],

        ['message', 'required', 'when' => function($model) {
            return $model->file === null;
        } ,'whenClient' => 'function (attribute, value) {
            return $("#'. Html::getInputId($this ,'file') .'").val() === null;
         }'],
        ['file', 'required', 'when' => function($model) {
            return $model->message === null;
        } , 'whenClient' => 'function (attribute, value) {
            return $("#'. Html::getInputId($this ,'message') .'").val() == "";
         }'],

    ];
}