TLDR;为什么自定义规则返回False时,我的应用需要30秒钟以上才能重新加载,而如果为true,为什么我的应用需要不到1秒?
我在Laravel 5.8应用中创建了一个自定义规则。每当返回true时,重新加载页面只需不到一秒钟的时间。但是,当它返回false时,大约需要30秒钟以上的时间才能重新加载。有人知道如何解决这个问题吗?
*请注意,它似乎不是来自API本身,因为在Postman中,它会在不到一秒钟的时间内返回响应(是对还是错)。
在我的控制器中,我有规则,并且向它传递了三个参数:
$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;
}
通过
在passs函数中,我通过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和端口。
答案 0 :(得分:0)
您不应在验证说明中使用多种样式。如果您使用数组作为字段验证值,则应该这样:
$validator = Validator::make($request->all(), [
'vat' => ['min:4', 'max:14', new NewRule($param_1, $param_2, $param_3)],
]);