Как изменить атрибуты (значения) URL API в SLIM - PullRequest
0 голосов
/ 13 сентября 2018

Я делаю нумерацию страниц в REST API, разработанном для Slim.Использование API ниже для получения текущего uri

(string) $request->getUri();

RESULT :: http://localhost/slim/test_app/test/public/api/actions/?page=2

Но теперь для следующего запроса мне нужно заменить номер страницы в текущем URL на (+1), т.е. 3здесь и передайте данные, возвращенные пользователю, как показано ниже

{
"data":[
//data
]
"next": http://localhost/slim/test_app/test/public/api/actions/?page=3
}

Какой может быть лучший способ заменить номер страницы?У нас есть какой-нибудь прямой API для замены атрибутов?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы можете заменить значение нумерации страниц манипуляциями со строками. Но вы также можете использовать то, что обеспечивает Slim.

Класс

Slim\Http\Uri, который реализует Psr\Http\Message\UriInterface, имеет метод withQuery(), который заменит текущую строку запроса.

Он вернет клонированный Slim\Http\Uri экземпляр с заменой строки запроса.

$query = $request->getQueryParams();
$query['page'] = $query['page'] + 1;
$url = $request->getUri();
$nextUrl = $url->withQuery(http_build_query($query));
$data['next'] = (string) $nexUrl;
0 голосов
/ 14 сентября 2018

Я добавил функцию для объединения атрибутов и затем связал запрос с URL, как показано ниже:

private function merge_querystring($url = null,$query = null,$recursive = false)
    {
      if($url == null)
        return false;
      if($query == null)
        return $url;
      // split the url into it's components
      $url_components = parse_url($url);
      // if we have the query string but no query on the original url
      // just return the URL + query string
      if(empty($url_components['query']))
        return $url.'?'.ltrim($query,'?');
      // turn the url's query string into an array
      parse_str($url_components['query'],$original_query_string);
      // turn the query string into an array
      parse_str(parse_url($query,PHP_URL_QUERY),$merged_query_string);
      // merge the query string
      if($recursive == true)
        $merged_result = array_merge_recursive($original_query_string,$merged_query_string);
      else
        $merged_result = array_merge($original_query_string,$merged_query_string);
      // Find the original query string in the URL and replace it with the new one
      return str_replace($url_components['query'],http_build_query($merged_result),$url);
    }

и я использую ниже, чтобы добавить запрос к URL

    $postQuery["page"]=$currentpage+1;
    //print_r($postQuery);
    //echo http_build_query($postQuery);
    $data["next"]= $this->merge_querystring($request->getUri(),"?".http_build_query($postQuery));   
...