Yii2: Простое приложение c AngularJS фронтендом. Серверная часть

Теперь, когда все подготовительные работы закончены, можно всерьез заняться нашим приложением. PHP фреймворк Yii 2.0 позволяет быстро и просто создать необходимый нам функционал, включая RESTful api.

Забыл сказать, в этом учебном приложении мы реализуем простой каталог фильмов. Данные каталога будем хранить в базе данных mysql.

Структура базы данных

Создадим базу данных yii2-ang и добавим в нее таблицу film со следующей структурой:

  • id — int(11)
  • title — varchar(255)
  • storyline — text
  • director — varchar(100)
  • year — int(4)

Пример скрипта для создания новой базы данных, таблицы и заполнения ей первоначальными данными:

Структура базы данных может быть и сложнее, но для наших задач ограничимся вышеприведенной.

Подключение базы данных

Для настройки базы данных в базовом приложении нужно указать параметры подключения к ней в файле server/config/db.php:

Создание модели

В качестве помощи, при создании модели, можно использовать генератор кода gii.

В итоге, файл server/models/Film.php  должен иметь примерно следующее содержание:

Реализация RESTful api

Если вы не знакомы с особенностями поддержки rest в yii2, обратитесь документации.

Создание REST контроллера

Встроенный в Yii 2.0 генератор кода gii не поддерживает автоматическое создание crud для rest. Сделаем это сами.

Для начала, создадим файл FilmController.php в каталоге server/controllers, примерно следующего содержания:

Класс контроллера должен наследоваться от  yii\rest\ActiveController. Свойство  modelClass позволяет указать модель app\models\Film , которая будет использоваться для работы с данными.

Поведение cors добавлено для возможности доступа к данным посредством ajax запросов с других доменов.

Настройка ссылок

Внесем изменения в настройки базового приложения. Изменим конфигурацию компонента  urlManager в файле server/config/web.php :

Мы добавили URL правило для контроллера film для того, что бы можно было обращаться к данным используя красивые (человеко-понятные ссылки). В случае нескольких контроллеров, они задаются массивом:

Для активации красивых ссылок, нужно добавить файл server/web/.htaccess  , включающий mod_rewrite в apache:

В случае использования веб-сервера nginx, этот файл не нужен.

Включение приема JSON данных

По-умолчанию, api принимает только запросы типов  application/x-www-form-urlencoded и  multipart/form-data.

Для активации json запросов, нужно указать парсеру соответствующий компонент:

Контроль

Наш RESTful api готов и мы можем проверить его в работе. Открыв в браузере http://server.local/films, мы видим ответ в виде json на get запрос, перечень всех фильмов:

yii2 restful rest

Какие варианты запросов мы имеем

  • GET /films: Получить все фильмы;
  • HEAD /films: Получить заголовок ответа на запрос GET /films;
  • POST /films: Создать новый фильм;
  • GET /films/123: Получить данные фильма с id=23;
  • HEAD /films/123: Получить заголовок ответа GET /films/123;
  • PATCH /films/123 и PUT /films/123: Изменить данные фильма с id=123;
  • DELETE /films/123: Удалить фильм с id=123;
  • OPTIONS /films: Получить список доступных методов запроса для /films;
  • OPTIONS /films/123: Получить список доступных методов запроса для /films/123.

Уже на данном этапе возможно поэкпериментировать с RESTful api. Одним из самых доступных инструментов является Postman Chrome Extension:

yii2 rest postman

 

Заключение

Сегодня мы создали простое RESTful api на базе yii2 приложения basic. В дальнейшем будем использовать его из клиентской части приложения.

Введение;
Подготовка;
Серверная часть;
Клиентская часть 1;
Клиентская часть 2.

9 thoughts on “Yii2: Простое приложение c AngularJS фронтендом. Серверная часть”

  1. Не могли бы вы описать как проводиться аутентификация через RESTful . Какие манипуляции надо провести, а то в документации так поверхностно описано. Желательно с angularjs

    1. Это и есть XML. Но так отображается лишь для браузера. Yii2 в такой конфигурации может отдавать и json, и xml. Как именно отобразить данные бекенд определяет на основе полученных заголовков в запросе

    1. В моем случае был виноват Apache. Были не совсем правильно выставлены настройки.

  2. Какой смысл указывать в таблице кодировку utf8mb4? Если кодировка соединения utf8. Можете столкнуться со случайной потерей данных, если будете сохранять в таблицу например смаилы.

    «Если вдруг символы с четырехбайтовым представлением в UTF-8 появляются в колонке, которая определена как utf8mb3, то такой символ просто заменяется на знак вопроса (при условии set names utf8mb4, если используется utf8mb3, то строка внезапно обрежется по такому символу).»

    https://habrahabr.ru/company/mailru/blog/235209/#comment_7931895

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *