<?php


namespace Validate;


class TestValidate extends BaseValidate
{
    /**
     * @var array
     * 基础规则
     * 可以自定义方法，比如 checkIDs
     * 可以使用系统已定义的验证规则，在 Validate 基类的 $typeMsg 中查看
     */
    protected $rule = [
        'ids'       => 'checkIDs',
        'email'     => 'email',
        'age'       => 'between:0,100',
    ];

    /**
     * 自定义某一规则不符合后，输出给用户的提示语
     * @var string[]
     */
    protected $message = [
        "ids.require"    => "ids 参数必填",
        "ids.checkIDs"   => "ids 格式有误",
        "email.email"    => "邮箱格式有误",
    ];


    /**
     * 场景定义
     * edit 场景仅需要验证 email 与 age，并且不需要增加或删除验证条件
     * @var \string[][]
     */
    protected $scene = [
        'edit'  =>  ['email','age'],
    ];


    /**
     * 场景定义2
     * 定义一个方法，scene 做前缀，驼峰的加上场景名
     * only 定义需要验证的参数
     * append 在 rule 定义的条件基础上，再增加其他验证条件
     * remove 删除在 rule 中定义的某条件
     * @return TestValidate
     */
    public function sceneAdd()
    {
        return $this->only(['ids','email','age'])
            ->append('ids', 'require')
            ->append('email', 'require');
    }


    protected function checkIDs($params)
    {
        //id字符串转为id数组
        $params = explode(',', $params);
        if (empty($params)) {
            return false;
        }
        //每个id只能由字母数字组成
        foreach ($params as $param) {
            if (!$this->regex($param, '/^[A-Za-z0-9]+$/')) {
                return false;
            }
        }
        return true;
    }
}