set() public method

Sets the value for all elements matching the given JsonPath expression
public set ( string $expr, mixed $value ) : boolean
$expr string JsonPath expression
$value mixed Value to set
return boolean returns true if success
Example #1
0
 /**
  * 生成请求的示例和说明
  *
  * @param array $api            
  * @return array [sample, doc]
  */
 private function createRequestDoc($api)
 {
     //TODO: 需要处理特殊情况: 输入被绑定在多个参数, 或者输入的不同重叠区域被绑定到不同参数时
     $docs = '';
     // 提取参数
     $params = new JsonStore(array());
     foreach ($api['params'] as $name => $param) {
         $ori = $params->get($param['value']);
         if (count($ori) !== 0) {
             // 现在不支持同一个变量多个地方引用
             continue;
         }
         $info = new \ArrayObject(array($name, $param));
         $params->set($param['value'], $info);
     }
     $params = $params->toArray();
     // 路由中指定的路径
     $route_path = HttpRouterEntries::stringToPath($api['uri'][1]);
     // 这是绝对路径
     $path = $api['uri'][0];
     // 路径拼到示例中
     if (isset($params['path'])) {
         $req_path = $params['path'];
         // 请求中使用的路径, 这是相对路径
         $offest = count(HttpRouterEntries::stringToPath($api['root']));
         // 相对于绝对路径的偏移
         if (is_array($req_path)) {
             // 参数只是路径的一部分
             if (count($req_path) > 0) {
                 $end = max(array_keys($req_path));
                 Verify::isTrue($end < 128, "too long path with length {$end}");
                 for ($i = 0; $i <= $end; $i++) {
                     if (isset($req_path[$i])) {
                         list($arg_name, $arg_info) = $req_path[$i];
                         if (isset($route_path[$i + $offest]) && $route_path[$i + $offest] !== '*') {
                             //忽略固定的路径
                         } else {
                             $route_path[$i + $offest] = "[{$arg_name}]";
                             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
                         }
                     } else {
                         if (!isset($route_path[$i + $offest])) {
                             $route_path[$i + $offest] = '*';
                         }
                     }
                 }
             }
         } else {
             // 参数整个路径
             list($arg_name, $arg_info) = $req_path;
             $route_path[$offest] = "[{$arg_name}]";
             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
         }
         unset($params['path']);
     }
     $path .= ' /';
     $path .= implode('/', $route_path);
     // querystring
     if (isset($params['_GET'])) {
         $get = $params['_GET'];
         if (is_array($get)) {
             $first = true;
             foreach ($get as $name => $value) {
                 list($arg_name, $arg_info) = $value;
                 if ($first) {
                     $path = $path . '?';
                     $first = false;
                 } else {
                     $path = $path . '&';
                 }
                 $path = "{$path}{$name}=[{$arg_name}]";
                 $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
             }
         } else {
             // 参数整个_GET
             list($arg_name, $arg_info) = $get;
             $path = "{$path}?[{$arg_name}]";
             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
         }
         unset($params['_GET']);
     }
     $path .= " HTTP/1.1\r\n";
     // header
     $header = '';
     if (isset($params['header'])) {
         $headers = $params['header'];
         $first = true;
         foreach ($headers as $header_name => $value) {
             //if (substr_compare($name, 'HTTP_X_', 0, 7) !== 0) {
             //    continue;
             //}
             //$words = explode('_', substr($name, 7));
             //$header_name = '';
             //foreach ($words as $k => $word) {
             //    $words[$k] = ucwords(strtolower($word));
             //}
             //$header_name = implode('-', $words);
             list($arg_name, $arg_info) = $value;
             $header = "{$header}{$header_name}: [{$arg_name}]\r\n";
             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
             unset($params['_SERVER'][$name]);
         }
     }
     // cookie
     $header = '';
     if (isset($params['_COOKIE'])) {
         $cookies = $params['_COOKIE'];
         $first = true;
         $header = $header . "Cookie: ";
         foreach ($cookies as $cookie_name => $value) {
             list($arg_name, $arg_info) = $value;
             $header = "{$header}{$cookie_name}=[{$arg_name}];";
             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
         }
         $header .= "\r\n";
     }
     // body
     $body = '';
     if (isset($params['_POST'])) {
         $post = $params['_POST'];
         $first = true;
         if (is_array($post)) {
             foreach ($post as $name => $value) {
                 list($arg_name, $arg_info) = $value;
                 if ($first) {
                     $first = false;
                 } else {
                     $body = $body . '&';
                 }
                 $body = "{$body}{$name}=[{$arg_name}]";
                 $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
             }
         } else {
             // 参数整个_POST
             list($arg_name, $arg_info) = $post;
             $body = "{$body}[{$arg_name}]";
             $docs = "{$docs}{$arg_name}:\r\n {$arg_info['doc']}\r\n\r\n";
         }
         unset($params['_POST']);
     }
     if (isset($params['_FILES'])) {
         $files = $params['_FILES'];
         if (is_array($files)) {
             foreach ($files as $name => $value) {
                 //TODO: 这里假设只有一个文件上传
                 list($arg_name, $arg_info) = $this->searchArgInfo($value);
                 $docs = "{$docs}{$name}:\r\n {$arg_info['doc']}\r\n\r\n";
             }
         }
         unset($params['_POST']);
     }
     $sample = $path . $header . "\r\n" . $body;
     return array($sample, $docs);
 }