Добавление выпадающего поля в пользовательскую форму, которая заполняет данные из API - PullRequest
0 голосов
/ 30 мая 2019

Я настраиваю пользовательскую форму и хочу выпадающее поле, которое получает свои значения от внешнего API. В раскрывающемся поле отображаются значения, и когда я добавляю их в пользовательскую форму, отправка формы переходит к 500: Ошибка. Мне было интересно, есть ли процедура для этого в Silverstripe

class TestDropdown extends EditableMultipleOptionField {

private static $singular_name = 'Test Dropdown Field';

private static $plural_name = 'Test Dropdown Fields';

/**
 * @return DropdownField
 */
public function getFormField() {    
    function testAPICall($method, $url, $data){
       $curl = curl_init();

       switch ($method){
          case "POST":
             curl_setopt($curl, CURLOPT_POST, 1);
             if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
             break;
          case "PUT":
             curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
             if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
             break;
          default:
             if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
       }

       // OPTIONS:
       curl_setopt($curl, CURLOPT_URL, $url);
       curl_setopt($curl, CURLOPT_HTTPHEADER, array(
          'api.authorization.key: xxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbb',
          'Content-Type: application/json',
       ));
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

       // EXECUTE:
       $result = curl_exec($curl);
       if(!$result){die("Connection Failure");}
       curl_close($curl);
       return $result;
    }
    $get_data = testAPICall('GET', 'http://xxxxxx/yyy/zzzz', false);
    $optionSet =  json_decode($get_data, true);

    if($optionSet) {
        foreach($optionSet as $key => $value) {
            $options[$key] = $value;
        }
    }

    $field = DropdownField::create($this->Name, $this->Title, $optionSet);


    return $field;
}
}

1 Ответ

0 голосов
/ 07 июня 2019

Действие формы приводит к белому экрану смерти, который в этом случае не создает журнал.Таким образом, мы выяснили, что это связано с пользовательскими формами Silverstripe, которые не обрабатывают данные из внешнего APi.Моим последним средством было обновление до последней версии, которая исправила эту проблему.Спасибо всем.

...