mepihindeveloper / php-query-string
Component for working with query string
Requires
- php: >=7.4
- mepihindeveloper/php-query-param: ^1.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
README
Компонент для работы со строкой запроса. Основной функционал направлен на формирование строки запроса посредством реализации шаблона проектирования "Строитель".
Строка запроса - то, что находится в URI после ?
.
Структура
src/
--- exceptions/
------ QueryStringNotFoundException.php
--- interfaces/
------ QueryStringInterface.php
--- QueryString.php
--- QueryStringAbstract.php
--- QueryStringBuilder.php
В директории interfaces
хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
собственного класса QueryString
. Класс QueryString
выступает в качестве объекта строки запроса.
В директории exceptions
хранятся необходимые исключения. Исключение QueryStringNotFoundException
необходимо
для идентификации ошибки отсутствия необходимых ключей.
Класс QueryString
реализует саму строку запроса. Собственные классы параметры должны наследоваться от класса QueryString
.
Класс QueryStringAbstract
реализует общую логику для всех строк запроса. В данном случае, хранит в себе необходимые свойства объектов.
Класс QueryStringBuilder
реализует логику формирования объекта класса QueryString
.
Примерная реализация формирования параметра:
<?php declare(strict_types = 1); use mepihindeveloper\components\query\param\ParamBuilder; use mepihindeveloper\components\query\QueryStringBuilder; error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); require_once 'vendor/autoload.php'; $uri = 'foo://example.com:8042/over/there?name=ferret&a[]=11&a[]=22#nose'; $query = (new QueryStringBuilder())->setQueryDataByUri($uri)->build(); $query2 = (new QueryStringBuilder())->setParams([ (new ParamBuilder())->setName('name')->setValue('ferret')->build(), (new ParamBuilder())->setName('a')->setValue([11, 22])->build(), ])->setFragment('nose')->build();
Доступные методы
QueryStringInterface
Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
---|---|---|---|---|
get(?string $key = null) | Ключ (название) параметра | Param|Param[] Возвращает объект или массив объектов класса Param. Param класс возвращается по умолчанию, но, можно реализовать свой класс, наследующийся от Param | QueryStringNotFoundException | Получает параметр(ы). Если ключ не задан, то получает все параметры |
getFragment() | string|null Возвращает строку фрагмента строки запроса или NULL в случае его отсутствия | Получает фрагмент из строки запроса (https://www.ietf.org/rfc/rfc3986.txt) | ||
toString() | string Возвращает строку запроса с параметрами | Формирует строку запроса |
QueryStringBuilder
Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
---|---|---|---|---|
__construct(string $queryString = QueryString::class, string $param = Param::class) | Класс объекта QueryString. Реализуется через Object::class. Класс объекта Param. Реализуется через Object::class | |||
setParam(ParamInterface $param) | Объект параметра | QueryStringBuilder | Устанавливает параметр | |
setParams(array $params) | ParamInterface[] $params Массив объектов параметров | QueryStringBuilder | Устанавливает параметры массива объектов ParamInterface | |
setParamsArray(array $params) | Массив параметров | QueryStringBuilder | QueryStringNotFoundException|ParamDataException | Устанавливает параметры и фрагмент из переданной строки |
setQueryDataByUri(string $uri) | URI | QueryStringBuilder | QueryStringNotFoundException|ParamDataException | Устанавливает параметры и фрагмент из переданной строки |
setFragment(string $fragment) | Фрагмент | QueryStringBuilder | Устанавливает фрагмент запроса (https://www.ietf.org/rfc/rfc3986.txt) | |
build() | QueryStringInterface | Формирует объект QueryString. Может быть изменен в конструкторе класса |
Контакты
Вы можете связаться со мной в социальной сети ВКонтакте: ВКонтакте: Максим Епихин
Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com
Мой канал на YouTube, который посвящен разработке веб и игровых проектов: YouTube: Максим Епихин
Поддержать меня можно переводом на Яндекс.Деньги: Денежный перевод