Пользовательские правила Laravel 5.8 - возврат False очень медленный

TLDR; Почему мое приложение перезагружается более 30 секунд, если пользовательское правило возвращает значение False, а если оно — менее 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;
}

Проходит

В функции передачи я отправляю эти параметры через 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-адреса и порты.


person Brad Ahrens    schedule 12.06.2019    source источник
comment
Вы пытались анализировать время завивки? curl_getinfo($curl) Я бы сначала проверил, не выглядит ли там что-то странное.   -  person Frnak    schedule 12.06.2019
comment
Спасибо @FrankProvost, я добавил эту информацию сюда. Хотя не похоже, что это проблема.   -  person Brad Ahrens    schedule 12.06.2019
comment
Ваше общее время говорит: 0.351214 вы опубликовали результат безошибочного (быстрого) вызова? 0,35 секунды не кажутся очень длинными. Вам нужно будет предоставить информацию о проблемных вызовах, чтобы увидеть, какое время выше ожидаемого.   -  person Frnak    schedule 13.06.2019


Ответы (1)


Вы не должны использовать несколько стилей в своей инструкции по проверке. Если вы используете массив в качестве значения проверки поля, вы должны сделать это следующим образом:

$validator = Validator::make($request->all(), [
    'vat' => ['min:4', 'max:14', new NewRule($param_1, $param_2, $param_3)],
]);
person Vitalii    schedule 12.06.2019
comment
Я не могу сказать это точно, но мне кажется, что это не решает реальной проблемы. - person Frnak; 12.06.2019
comment
Спасибо за комментарий Виталий, но я пробовал и так, скорость не увеличилась. - person Brad Ahrens; 12.06.2019