예제 #1
0
 /**
  * @cover ::buildUrl
  * @dataProvider urlWithRouteProvider
  */
 public function testBuildUrlWithRoute($baseUrl, $uri, $parameters, $expected)
 {
     $routerProphecy = $this->prophesize(RouterInterface::class);
     $routerProphecy->generate('my_route', [])->willReturn('/my/route');
     $routerProphecy->generate('my_route', ['id' => 14])->willReturn('/my/route/14');
     $urlBuilder = new UrlBuilder($routerProphecy->reveal());
     $this->assertEquals($expected, $urlBuilder->buildUrl($baseUrl, $uri, $parameters));
 }
예제 #2
0
 /**
  * Creates and return a new request object. All get, head, etc. methods are generated via this method.
  *
  * @example
  *  If URL is empty, only the base URL will be used:
  *  ::createRequest('GET')
  *  => http://localhost
  *
  *  If URI is used, add the base URL to generate the proper URL to request
  *  ::createRequest('GET', '/api/users')
  *  => http://localhost/api/users
  *
  *  If route name is used, will first generate the URI before applying the base URL; can use parameters
  *  ::createRequest('GET', 'users_cget')
  *  => http://localhost/api/users
  *
  *  ::createRequest('GET', 'users_get', null, ['parameters' => ['id' => 14]])
  *  => http://localhost/api/users/14
  *
  *  Can also apply other options
  *  ::createRequest('GET', null, null, ['query' => ['id' => 14, 'filter' => ['order' => ['startAt' => 'desc']]])
  *  => http://localhost/api?id=14&filter[where][name]=john
  *
  *  Or if you have just one query
  *  ::createRequest('GET', null, null, ['query' => 'filter[where][name]=john')
  *  => http://localhost/api?filter[where][name]=john
  *
  * @param string      $method  HTTP method.
  * @param string|null $url     URL,  URL, URI or route name.
  * @param string|null $token   API token.
  * @param array       $options Array of request options to apply. can have the keys:
  *                             - headers: array
  *                             - parameters (route parameters if $url is a route and not an URI)
  *                             - body: string|null
  *
  * @return RequestInterface
  *
  * @throws RouteNotFoundException              If the named route doesn't exist
  * @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route
  * @throws InvalidParameterException           When a parameter value for a placeholder is not correct because it
  *                                             does not match the requirement
  */
 public function createRequest($method, $url = null, $token = null, array $options = [])
 {
     // Extract route parameters
     $parameters = [];
     if (true === array_key_exists('parameters', $options)) {
         $parameters = $options['parameters'];
     }
     // If Query is an array cast it to string
     $uri = null;
     if (true === array_key_exists('query', $options)) {
         if (true === is_array($options['query'])) {
             $uri = http_build_query($options['query']);
         } elseif (true === is_string($options['query'])) {
             $uri = $options['query'];
         }
     }
     // Build URL with query parameters
     $url = null === $uri ? $this->urlBuilder->buildUrl($this->baseUrl, $url, $parameters) : sprintf('%s?%s', $this->urlBuilder->buildUrl($this->baseUrl, $url, $parameters), $uri);
     return new Request($method, $url, $this->getHeaders($token, $options));
 }