0

TLDR;为什么当自定义规则返回 False 时我的应用程序需要 30 多秒才能重新加载,而当为 true 时却不到 1 秒?

我在我的 Laravel 5.8 应用程序中创建了一个自定义规则。每当它返回 true 时,页面重新加载只需不到一秒的时间。但是,当它返回 false 时,重新加载大约需要 30 多秒。有谁知道如何解决这一问题?

*注意,它似乎不是来自 API 本身,因为在 Postman 中,它会在不到一秒的时间内返回响应,无论是真还是假。

在我的控制器中,我有 Rule 并传递三个参数:

$validator = Validator::make($request->all(), [
     'vat' => ['min:4|max:14', new NewRule($param_1, $param_2, $param_3)],
]);

在规则中,我接受这些参数__construct并在函数中使用它们passes

构造:

public function __construct($param_1, $param_2, $param_3)
{
    $this->param_1 = $param_1;
    $this->param_2 = $param_2;
    $this->param_3 = $param_3;
}

通行证

在 pass 函数中,我通过 API 发送这些参数来验证给定的信息。

public function passes($attribute, $value)
{
    $param_1 = $this->param_1;
    $param_2 = $this->param_2;

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => "http://api.endpoint.net",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "{\"jsonrpc\": \"2.0\",\"id\": 1,\"method\": \"Validator\",\"params\": {\"param_1\": \"".$param_1."\",\"param_2\":\"".$param_2."\"} }",
        CURLOPT_HTTPHEADER => array(
            "Accept: */*",
            "Connection: keep-alive",
            "Content-Type: application/json",
            ),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    $valid_vat = json_decode($response, true)['result']['valid'];

    return $valid_vat ?: false;
}

最后,message我要返回的是:

public function message()
{
    return 'Invalid VAT number';
}

感谢您的任何意见和建议!我很感激 :)

请注意,return $valid_vat ?: false;我也尝试过:

if($valid_vat === true){
    return true;
} else {
    return false;
}

嘿伙计们,感谢您的评论。我跑了url_getinfo($curl),得到以下信息:


array(26) {
  ["url"]=>
  string(42) "http://api.endpoint.net/"
  ["content_type"]=>
  string(31) "application/json; charset=UTF-8"
  ["http_code"]=>
  int(200)
  ["header_size"]=>
  int(287)
  ["request_size"]=>
  int(490)
  ["filetime"]=>
  int(-1)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(0.351214)
  ["namelookup_time"]=>
  float(2.8E-5)
  ["connect_time"]=>
  float(0.060498)
  ["pretransfer_time"]=>
  float(0.0606)
  ["size_upload"]=>
  float(116)
  ["size_download"]=>
  float(48)
  ["speed_download"]=>
  float(136)
  ["speed_upload"]=>
  float(330)
  ["download_content_length"]=>
  float(-1)
  ["upload_content_length"]=>
  float(116)
  ["starttransfer_time"]=>
  float(0.351183)
  ["redirect_time"]=>
  float(0)
  ["redirect_url"]=>
  string(0) ""
  ["primary_ip"]=>
  string(11) "99.999.9.99"
  ["certinfo"]=>
  array(0) {
  }
  ["primary_port"]=>
  int(99)
  ["local_ip"]=>
  string(12) "99.999.9.99"
  ["local_port"]=>
  int(99999)
}

请注意,我更改了 API 端点、IP 和端口。

4

1 回答 1

0

您不应该在验证说明中使用多种样式。如果您使用数组作为字段验证值,您应该这样做:

$validator = Validator::make($request->all(), [
    'vat' => ['min:4', 'max:14', new NewRule($param_1, $param_2, $param_3)],
]);
于 2019-06-12T14:42:56.743 回答