Exemple #1
0
 /**
  * Create request parameters from model rules
  */
 private function buildParametersFromRules()
 {
     // on GET-request we can to send only query string parameters
     if ($this->name == 'get') {
         $this->in = 'query';
     }
     // additional parameters from config, usually HTTP-headers
     if ($this->module->additionalFields) {
         foreach ($this->module->additionalFields as $field) {
             $param = new Parameter();
             $param->setData($field);
             $this->parameters->add($param);
         }
     }
     $rules = $this->getRulesForAction();
     if (!is_array($rules)) {
         return;
     }
     $parameters = [];
     foreach ($rules as $rule) {
         $rule[0] = is_array($rule[0]) ? $rule[0] : [$rule[0]];
         foreach ($rule[0] as $field) {
             if (!array_key_exists($field, $parameters)) {
                 $parameters[$field] = ['name' => $field, 'in' => isset($rule[2]) ? $rule[2] : $this->in, 'description' => $field, 'type' => 'string'];
             }
             if ($rule[1] instanceof \Closure) {
                 $method = 'ruleString';
             } else {
                 $method = 'rule' . ucfirst($rule[1]);
             }
             if (method_exists($this, $method)) {
                 $res = call_user_func([$this, $method], $rule);
                 $parameters[$field] = ArrayHelper::merge($parameters[$field], $res);
             }
         }
     }
     $parameters = array_values($parameters);
     foreach ($parameters as $param) {
         $p = new Parameter();
         $p->setData($param);
         $this->parameters->add($p);
     }
     // if at least one parameter has type file, we can use only FormData request
     if ($this->parameters->find('type', 'file')) {
         $this->in = 'formData';
         $this->parameters->set('in', 'formData', ['header']);
     }
 }