Laravel 5.8自定义规则-误传速度慢

时间:2019-06-12 14:39:44

标签: php laravel laravel-5.8 validationrules

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

1 个答案:

答案 0 :(得分:0)

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

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