PhoneRequest.php 1.58 KB
<?php

namespace App\Http\Request;

use App\Enums\UserStatusEnum;
use App\Helpers\SmsHelper;
use Hikoon\LaravelApi\Support\ApiRequest;
use Overtrue\EasySms\PhoneNumber;
use Str;

class PhoneRequest extends ApiRequest
{
    public PhoneNumber $phoneNumber;

    protected string $areaName = 'area';

    protected string $phoneName = 'phone';

    public function prepareForValidation(): void
    {
        $this->mergeIfMissing([$this->areaName => Str::of($this->input($this->areaName, '86'))->ltrim('+')->toString()]);
    }

    public function passedValidation(): void
    {
        $this->phoneNumber = SmsHelper::getAreaPhoneNumber($this->input($this->phoneName), $this->input($this->areaName));
    }


    public function rules(): array
    {
        return [
            $this->areaName  => 'required|integer',
            $this->phoneName => 'required'
        ];
    }

    public function messages(): array
    {
        return [
            $this->areaName . '.required'  => '请选择手机区号',
            $this->areaName . '.integer'   => '手机区号格式不正确',
            $this->phoneName . '.required' => '请输入手机号'
        ];
    }

    /**
     * @return bool
     */
    public function checkPhoneExist(): bool
    {
        return SmsHelper::checkPhoneExist($this->phoneNumber, $this->input('scope'));
    }

    /**
     * @param int|array|UserStatusEnum $status
     * @return bool
     */
    public function checkPhoneStatus(array|int|UserStatusEnum $status): bool
    {
        return SmsHelper::checkPhoneStatus($this->phoneNumber, $status, $this->input('scope'));
    }
}