В этой статье мы создадим простое
Silex — это PHP микро-фреймворк от создателей Symfony и во многом построенный на его базе. Подробнее о нем можно узнать из следующего хабрапоста
Для этого примера я буду использовать каталог с именем toyshop
Есть несколько способов установки
Внутри вашей рабочей директории выполните команду:
С помощью этой команды вы дали команду Composer сделать следующее:
Когда Вы запустите эту команду, Вы увидите, что Composer установит также и библиотеки, которые Вы не запрашивали, — не волнуйтесь, так и должно было произойти, так как Silex требует наличия этих библиотек, для корректной работы.
Как только команда закончит выполнение, вы получите следующую файловую структуру, приведённую ниже:
Весь код Silex хранится внутри папки vendor, а 2 файла Composer'a содержат информацию о том, какие пакеты и версии библиотек установлены.
Давайте посмотрим внутрь composer.json, он должен выглядеть примерно так:
Этот файл содержит список всех установленных пакетов, а также их версии. Это очень полезно, поскольку это означает, что Вы теперь не должны делать
Так как наше приложение — это магазин игрушек, давайте подумаем, что нам будет нужно. Люди, которые будут заходить на наш сайт, захотят увидеть подарки, значит давайте создадим маршрут, который позволит получить список подарков.
Давайте создадим файл
Теперь у нас объявлено 2 маршрута:
Это маршрут для получения списка всех игрушек. Все, что делает данный метод — это кодирует данный в
Чтобы разрешить анонимной функции доступ к массив
Маршрут
Это маршрут для получения информации о конкретной игрушке, которая идентифицируется параметром
Наряду с
После настройки веб-сервера для маршрутизации всех запросов через index.php можно перейти к маршрутам с помощью
Например,
Ответ возвращает в удобном формате, подходящем для использования в Вашем интернет-магазине или мобильном приложений. Всё, что надо сделать, это выполнить над этими данными функцию json_decode и отобразить данные в удобном формате, например, HTML.
Хороший вопрос.
Ответ: поскольку это микро-фреймворк, он не заставляет меня писать в своём собственном предпочтительном стиле и выходит мне не нужно менять свой стиль программирования, чтобы работать с Silex. Если бы Вы хотели, Вы могли бы использовать Slim, любой другой микро-фреймворк или даже полноценные фреймворки как Symfony или Zend.
Хотелось бы добавить, что также легко работать в Silex и с другими типами HTTP-запросов, такими, как PUT, POST, DELETE (пример ниже)
Таким образом можно создать полноценное REST-приложение.
REST
приложение на PHP-фреймворке Silex
, начав с установки Silex
и закончив созданием нескольких маршрутов приложения.Silex — это PHP микро-фреймворк от создателей Symfony и во многом построенный на его базе. Подробнее о нем можно узнать из следующего хабрапоста
Давайте начнём
Для этого примера я буду использовать каталог с именем toyshop
Установка Silex
Есть несколько способов установки
Silex
, но давайте используем для этого Composer
.Внутри вашей рабочей директории выполните команду:
composer require silex/silex ~1.1
С помощью этой команды вы дали команду Composer сделать следующее:
require
добавляет новый пакет к проектуsilex / silex
имя пакета в формате поставщик(vendor)/пакет(package)~ 1.1
— версия пакета, ~ 1.1 означает >= 1.1, <2,0
Когда Вы запустите эту команду, Вы увидите, что Composer установит также и библиотеки, которые Вы не запрашивали, — не волнуйтесь, так и должно было произойти, так как Silex требует наличия этих библиотек, для корректной работы.
Как только команда закончит выполнение, вы получите следующую файловую структуру, приведённую ниже:
toyshop/
composer.json
composer.lock
vendor/
...
Весь код Silex хранится внутри папки vendor, а 2 файла Composer'a содержат информацию о том, какие пакеты и версии библиотек установлены.
Composer.json
Давайте посмотрим внутрь composer.json, он должен выглядеть примерно так:
{
"require": {
"silex/silex": "~1.1"
}
}
Composer.lock
Этот файл содержит список всех установленных пакетов, а также их версии. Это очень полезно, поскольку это означает, что Вы теперь не должны делать
commit
папки vendor/
, когда заливаете проект в репозиторий — все библиотеки, необходимые для корректной работы приложения, могут быть установлены на основе этого файла. Вам лишь необходимо залить в репозиторий файлы composer.json
и composer.lock
и тогда, как только код будет извлечен из репозитория, Вы можете просто запустить команду composer install
и Composer
сам установит необходимые библиотеки указанных версий.Создание маршрутов
Так как наше приложение — это магазин игрушек, давайте подумаем, что нам будет нужно. Люди, которые будут заходить на наш сайт, захотят увидеть подарки, значит давайте создадим маршрут, который позволит получить список подарков.
Давайте создадим файл
index.php
. Добавим в него код, чтобы он выглядел следующим образом:<?php
require_once __DIR__.'/vendor/autoload.php';
$app = new Silex\Application();
// Please set to false in a production environment
$app['debug'] = true;
$toys = array(
'00001'=> array(
'name' => 'Racing Car',
'quantity' => '53',
'description' => '...',
'image' => 'racing_car.jpg',
),
'00002' => array(
'name' => 'Raspberry Pi',
'quantity' => '13',
'description' => '...',
'image' => 'raspberry_pi.jpg',
),
);
$app->get('/', function() use ($toys) {
return json_encode($toys);
});
$app->get('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) {
if (!isset($toys[$stockcode])) {
$app->abort(404, "Stockcode {$stockcode} does not exist.");
}
return json_encode($toys[$stockcode]);
});
$app->run();
Теперь у нас объявлено 2 маршрута:
/
и /{stockcode}
Маршрут /
Это маршрут для получения списка всех игрушек. Все, что делает данный метод — это кодирует данный в
JSON
и возвращает закодированные данные в качестве ответа на запрос.Чтобы разрешить анонимной функции доступ к массив
$toys
мы должны импортировать его, добавив use($toys)
в конце определения анонимной функции, но до открытия скобки {.Маршрут /{stockcode}
Это маршрут для получения информации о конкретной игрушке, которая идентифицируется параметром
stockcode
. Как Вы видете, что это в этом маршруте используется функция с чуть более сложным заголовком.Наряду с
use($toys)
мы передаем пару переменных в саму функцию: Silex\Application $app и $stockcode.
Silex\Application $app
— это объект приложения Silex и с его помощью мы можем вывести красивую страницу ошибки 404, если был передан неверный stockcode.$stockcode
— идентификатор игрушки, информацию о которой мы хотим получить. Как Вы видете, эта переменная соответствует {stockcode}, который есть в описанном нами маршруте.Тестируем приложение
После настройки веб-сервера для маршрутизации всех запросов через index.php можно перейти к маршрутам с помощью
toyshop и toyshop/00001
и увидеть результат, который вернёт каждый из этих запросов.Например,
toyshop/00001
вернёт:{"name":"Raspberry Pi","quantity":"13","description":"...","image":"raspberry_pi.jpg"}
Ответ возвращает в удобном формате, подходящем для использования в Вашем интернет-магазине или мобильном приложений. Всё, что надо сделать, это выполнить над этими данными функцию json_decode и отобразить данные в удобном формате, например, HTML.
Почему Silex?
Хороший вопрос.
Ответ: поскольку это микро-фреймворк, он не заставляет меня писать в своём собственном предпочтительном стиле и выходит мне не нужно менять свой стиль программирования, чтобы работать с Silex. Если бы Вы хотели, Вы могли бы использовать Slim, любой другой микро-фреймворк или даже полноценные фреймворки как Symfony или Zend.
Примечания от переводчика
Хотелось бы добавить, что также легко работать в Silex и с другими типами HTTP-запросов, такими, как PUT, POST, DELETE (пример ниже)
$app->post('/toys', function (Silex\Application $app) use ($toys) {
//...
});
$app->put('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) {
//...
});
$app->delete('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) {
//...
});
Таким образом можно создать полноценное REST-приложение.