1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sofical-restphp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 12:43 bb1cbcb

RestPHP

RestPHP: особенности

  • Поддержка путей параметров, например: /users/{userId} или /users/{userId}/orders/{orderId};
  • Поддержка AOP. С помощью @Aspect можно быстро реализовать логику разработки аспектов;
  • Поддержка различных HTTP-методов. Поддерживает обработку запросов и ответов в виде форм, JSON и XML;
  • Поддержка многоязычных настроек;
  • Поддержка аннотаций для проверки форм.

Установка

  1. Скопируйте проект на локальный компьютер с помощью команды git clone. Затем используйте команду composer update для установки зависимостей.
  2. Настройте корневой каталог запуска контейнера на файл программы входа, такой как bootstrap. Также настройте правила перезаписи URL, чтобы все запросы были перенаправлены на файл программы входа. Например, конфигурация перезаписи Nginx:
location / {
    index  index.php;
    if (!-e $request_filename) {            
        rewrite ^/(.*)$ /index.php?$1 last;                
    }            
}
  1. В корне проекта выполните команду php BUILD для создания файла маршрутизации.
  2. Посетите http://localhost для просмотра результатов.

Использование

Загрузка файлов

Файлы загружаются автоматически, без необходимости использования команд require или include в логическом коде. Загрузка файлов разделена на две области:

  • Область кода проекта — DIR_BUILD и файлы проекта.
  • Область lib — файлы в DIR_LIB. Эта область обычно используется для сторонних плагинов.

Механизм загрузки файлов основан на сопоставлении имён пространств имён и классов, поэтому имена классов должны совпадать с именами файлов.

Создание маршрутов

Используйте аннотацию @RequestMapping с параметрами value и method. Теперь можно использовать ключевые слова действий, такие как @Get, @Post, @Put, @Delete, @Patch, вместо параметра method.

Значение параметра value может быть одним или несколькими. Если значение одно, оно может быть записано как value="/index.html". Если значений несколько, они должны быть записаны как value=["/", "/index.html", "/index"].

Параметр method представляет собой HTTP-глагол (метод), такой как GET, POST, PUT, DELETE, PATCH и т. д. Регистр не имеет значения, но рекомендуется использовать верхний регистр.

Пример:

/**
 * 首页 маршрута.
 * @RequestMapping("")
 */
class IndexController {
    /**
     * 首页.
     * @RequestMapping(value=["/", "/index.html", "/index"], method="GET")
     */
    public function index() {
        // put your logic here
        echo "hello moto!";
    }
}

Получение общих параметров запроса

Параметры пути

Для получения параметров пути используйте метод RestHttpRequest::getPathValue(). Обратите внимание, что множественные маршруты не поддерживают параметры пути.

Например, при доступе к пути /users/97 будет получен идентификатор пользователя 97:

/**
 * @RequestMapping("/users")
 */
class UserController {
    /**
     * @RequestMapping(value="/{userId}", method="GET")
     */
    public function userInfo() {
        $userId = RestHttpRequest::getGet("userId");
        echo $userId;
    }
}

Параметры запроса

Параметры запроса можно получить с помощью методов RestHttpRequest::getGet() или RestHttpRequest::getParameterAsObject(), а также с помощью метода RestHttpRequest::getPageParam() для получения объекта разбивки на страницы.

Метод RestHttpRequest::getGet() используется для получения отдельных параметров пути, а метод RestHttpRequest::getParameterAsObject() — для получения одного или нескольких параметров в виде объекта.

Применение метода RestHttpRequest::getGet():

При доступе к пути /users?name=张 будет получено значение параметра name:

/**
 * @RequestMapping("/users")
 */
class UserController {
    /**
     * @RequestMapping(value="", method="GET")
     */
    public function userList() {
        $name = RestHttpRequest::getGet("name");
        echo $name;
    }
}

Применение метода RestHttpRequest::getParameterAsObject():

При доступе к пути /users?name=张&mobile=1360000 будут получены значения параметров name и mobile в виде объекта:

Определите объект приёма, QueryForm:

final class QueryForm {
    private $_name;
    private $_mobile;
    public function getName() {
        return $this->_name;
    }
    public function setName($name) {
        $this->_name = $name;
    }
    public function getMobile() {
        return $this->_mobile;
    }
    public function setMobile($mobile) {
        $this-_mobile = $mobile;
    }
}

В классе UserController используйте метод RestHttpRequest::getParameterAsObject() для получения объекта QueryForm:

/**
 * @RequestMapping("/users")
 */
class UserController {
    /**
     * @RequestMapping(value="", method="GET")
     */
    public function userList() {
        $queryForm = RestHttpRequest::getParameterAsObject(new QueryForm());
        var_export($queryForm);
    }
}

Тело параметров

Тело параметров можно получить с помощью метода RestHttpRequest::getBody().

Пример получения тела содержимого {«username»: «小红», «mobile»: «13800000000», «age»: «18»}:

Определите принимающий объект, UserForm:

final class UserForm {
    private $_name;
    private $_mobile;
    private $_age;
    public function getName() {
        return $this->_name;
    }
    public function setName($name) {
        $this-name = $name;
    }
    public function getMobile() {
        return $this->_mobile;
    }
    public function setMobile($mobile) {
        $this-_mobile = $mobile;
    }
    public function getAge() {
        return $this->_age;
    }
    public function setAge($age) {
        $this-_age = $age;
    }
}

В классе UserController используйте метод RestHttpRequest::getBody() для получения объекта UserForm или массива:

/**
 * @RequestMapping("/users")
 */
class UserController {
    /**
     * @RequestMapping(value="", method="POST")
     */
    public function newUser() {
        //获取为对象
        $userForm =
``` **Данные проверки**

В запросе представлен фрагмент кода на языке PHP, в котором описываются аннотации для валидации данных. Эти аннотации используются для проверки правильности ввода данных в формах.

Аннотации позволяют задать правила проверки для различных полей формы. В запросе представлены следующие аннотации:
* @length — проверяет длину строки;
* @notnull — проверяет наличие значения;
* @mobile — проверяет формат номера телефона;
* @email — проверяет формат адреса электронной почты;
* @domain — проверяет домен;
* @date — проверяет соответствие формата даты;
* @range — проверяет диапазон значений;
* @int — проверяет тип и диапазон целочисленных значений;
* @ipv4 — проверяет IPv4-адрес;
* @ipv6 — проверяет IPv6-адрес;
* @inArray — проверяет значение по списку;
* @notEmpty — проверяет непустое значение;
* @customer — позволяет задать пользовательскую функцию проверки.

**Пример использования**

Далее в запросе приведён пример создания класса MessageVo, который содержит поля с аннотациями для проверки данных. Класс MessageVo используется для представления сообщения.

Также в запросе есть пример использования этого класса в контроллере MessagesController. Контроллер MessagesController обрабатывает запросы на получение сообщений.

**Данные ответа**

Данные ответа представляют собой свободный формат без специальных правил и форматов. Для формирования ответов в запросе используются классы RestHttpResponse и RestTpl.

RestHttpResponse предоставляет методы для создания ответов, а RestTpl — простой механизм шаблонов.

**AOP (аспектно-ориентированное программирование)**

AOP позволяет добавлять дополнительную логику к коду без изменения основной функциональности. В запросе приведён пример реализации аспекта AopExample, который выполняет действия до и после обработки запроса.

Для использования AOP необходимо создать аспект и зарегистрировать его в системе. ```
@AopExample(param1="test",param2="test2")
    * @return void
    */
    public function index() {
        $this->_tpl->assign('app_name', 'RESTPHP 3.0');
        $this-> _tpl->display('index.tpl');
    }
}

Официальный сайт: https://www.restphp.com

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/sofical-restphp.git
git@api.gitlife.ru:oschina-mirror/sofical-restphp.git
oschina-mirror
sofical-restphp
sofical-restphp
master