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 和端口。