Exemplo n.º 1
0
 /**
  * Parse a query string into a Query object.
  *
  * @param puzzle_Query $query       Query object to populate
  * @param string       $str         Query string to parse
  * @param bool|string  $urlEncoding How the query string is encoded
  */
 public function parseInto(puzzle_Query $query, $str, $urlEncoding = true)
 {
     if ($str === '') {
         return;
     }
     $result = array();
     $this->duplicates = false;
     $this->numericIndices = true;
     $decoder = self::getDecoder($urlEncoding);
     foreach (explode('&', $str) as $kvp) {
         $parts = explode('=', $kvp, 2);
         $key = call_user_func($decoder, $parts[0]);
         $value = isset($parts[1]) ? call_user_func($decoder, $parts[1]) : null;
         // Special handling needs to be taken for PHP nested array syntax
         if (strpos($key, '[') !== false) {
             $this->parsePhpValue($key, $value, $result);
             continue;
         }
         if (!isset($result[$key])) {
             $result[$key] = $value;
         } else {
             $this->duplicates = true;
             if (!is_array($result[$key])) {
                 $result[$key] = array($result[$key]);
             }
             $result[$key][] = $value;
         }
     }
     $query->replace($result);
     if (!$this->numericIndices) {
         $query->setAggregator(puzzle_Query::phpAggregator(false));
     } elseif ($this->duplicates) {
         $query->setAggregator(puzzle_Query::duplicateAggregator());
     }
 }
Exemplo n.º 2
0
 public function testCanSpecifyQueryAggregator()
 {
     $b = new puzzle_post_PostBody();
     $b->setField('foo', array('baz', 'bar'));
     $this->assertEquals('foo%5B0%5D=baz&foo%5B1%5D=bar', (string) $b);
     $b = new puzzle_post_PostBody();
     $b->setField('foo', array('baz', 'bar'));
     $agg = puzzle_Query::duplicateAggregator();
     $b->setAggregator($agg);
     $this->assertEquals('foo=baz&foo=bar', (string) $b);
 }
Exemplo n.º 3
0
 /**
  * @ticket https://github.com/guzzle/guzzle/issues/706
  */
 public function testDoesNotApplyPostBodyRightAway()
 {
     $factory = new puzzle_message_MessageFactory();
     $request = $factory->createRequest('POST', 'http://f.cn', array('body' => array('foo' => array('bar', 'baz'))));
     $this->assertEquals('', $request->getHeader('Content-Type'));
     $this->assertEquals('', $request->getHeader('Content-Length'));
     $request->getBody()->setAggregator(puzzle_Query::duplicateAggregator());
     $request->getBody()->applyRequestHeaders($request);
     $this->assertEquals('foo=bar&foo=baz', $request->getBody());
 }
Exemplo n.º 4
0
 public function testDuplicateEncodesNoNumericIndices()
 {
     $agg = puzzle_Query::duplicateAggregator();
     $result = call_user_func($agg, $this->encodeData);
     $this->assertEquals(array('t[v1]' => array('a', '1'), 't[v2]' => array('b'), 't[v3][v4]' => array('c'), 't[v3][v5]' => array('d')), $result);
 }