Когда я начал использовать Node, я влюбился во многие вещи. Одной из первых вещей была модульная система-довольно умный способ экспорта состояния и поведения, сохраняя инкапсуляцию и не беспокоясь о наличии DI Container. Однако одна из вещей, которые мне больше всего понравились, – это то, насколько она гибкая и мощная Express.js, HTTP-слой по антономазии Node.
Мне это так понравилось, что я действительно хотел использовать его в PHP. Хотя это правда, PHP может похвастаться некоторыми подобными microframeworks, такими как Expressive и Slim, все еще было несколько вещей, которые они мне совсем не нравились.
Пор Элла, я решаю приготовить кофе эспрессо, без клу де Express.js страница PHP. В настоящее время он находится в версии 1.0.0-alpha1 . Это означает, что api уже хорошо определен и работает, но то, чего не хватает, – это обширные модульные тесты, прежде чем я чувствую себя уверенно, чтобы освободить его с продуктивным tag.
Идея этой статьи двоякая. Во-первых, это сделать проект известным и искать людей, которые хотят внести свой вклад аль мисмо пор медио де пробарло, джугар кон эл, автобус багси из запросов на получение помощи. Во-вторых, это показать потенциальным пользователям, как он используется.
Создание экземпляра Эспрессо
Эспрессо совместим. В мире PHP это означает, что он следует стандартам HTTP, определенным PHP-рис. Поэтому, чтобы использовать его, минимальное требование заключается в том, что у вас есть реализация PSR-7 и функция, которая выдает ответ PSR-7.
Личные рекомендации по установке el fabuloso zendframework/zend-diactor/| y http-взаимодействие/отправитель ответа .
Поэтому, чтобы установить эспрессо и эти два предложения, скопируйте эту команду в папку вашего проекта, и вы сможете начать:
composer require espresso/app dev-master zendframework/zend-diactoros http-interop/response-sender
ПРИМЕЧАНИЕ: Эспрессо в//dev-master//требуется только в Альфа-фазе.
Создать экземпляр эспрессо так же просто, как:
// No te olvides de requerir el autoload de composer antes!
$app = new Espresso(
[\Zend\Diactoros\ServerRequestFactory::class, 'fromGlobals'],
'\Http\Response\send'
);
Эти два параметра позволяют Espresso вызывать ваш метод//run . Что делает этот метод, так это создать экземпляр//ServerRequestInterface с помощью callable, получить экземпляр ResponseInterface//из конвейера промежуточного программного обеспечения, а затем выдать этот ответ с помощью предоставленного callable.
После создания экземпляра эспрессо очень легко вводить промежуточное программное обеспечение:
$app->use(new LoggingMiddleware());
Регистрация маршрутов в эспрессо
Пункт регистрации уна рата ан Эспрессо, тьене су диспозиция говорит, что методос, де сын бастанте класикос: получить , опубликовать , поставить , исправить , удалить у любого . Каждый из этих методов принимает |/path маршрут и неопределенное количество экземпляров MiddlewareInterface .
// Este handler sirve la página de inicio
$app->get('/', new HomePageHandler());
// Este handler sirve el panel de administración, pero primero se
// asegura que el usuario esté autenticado.
$app->get('/admin', new BasicAuthMiddleware(), new AdminPanelHandler());
Конечно, вы можете передать//placeholders//маршрутам, которые вы определяете. Они будут введены в атрибуты//ServerRequestInterface под именем, данным placeholder:
$app->get('/users/:id', function ($req) {
$id = $req->getAttribute('id'); // Esto devuelve el valor de id.
});
Обратите внимание, что также могут быть переданы callables или экземпляры//RequestHandlerMiddleware//.
В отличие от других микро-фреймворков в PHP, Espresso не имеет традиционной системы маршрутизации, состоящей из//Route Collector//и//Dispatcher . Вместо этого каждый путь сам по себе является промежуточным программным обеспечением и получает экземпляр |/ServerRequestInterface из которого вы получаете информацию, чтобы увидеть, есть ли match.
Это может показаться неэффективным, и это было бы, если бы мы определили каждый путь нашего приложения непосредственно в экземпляр Эспрессо. Тем не менее, эспрессо может похвастаться еще одной концепцией, взятой из Express.js-возможность встраивания маршрутизируемого компонента под path . Например, давайте подумаем о пользовательском модуле:
$userModule = new RoutableHttpComponent();
// Definimos algunas rutas relativas a este módulo
$userModule->get('/', function() {
// Devolver una lista de usuarios aquí
});
$userModule->post('/', function() {
// Crear un usuario aquí
});
$userModule->get('/:id', function() {
// Devolver un usuario específico aquí
});
// Y luego las importamos en la aplicación bajo un path en común
$app->use('/users', $userModule);
На самом деле эспрессо-это не что иное, как расширение этого RoutableHttpComponent//, которым он владеет метод//run//и некоторые методы настройки. Вы можете сделать свое собственное приложение, используя только//RoutableHttpComponent|/.
Эспрессо и инъекция зависимостей
Если вы используете контейнер для инъекций зависимостей, который реализует интерфейс, определенный PSR-11, вы можете использовать Espresso для разрешения любых зависимостей, переданных вышеупомянутым методам.
Esto puede hacer usando el método Набор контейнеров де эспрессо:
$app->setContainer($aContainerInstance);
Затем вы сможете определить пути и внедрить промежуточное программное обеспечение, просто ссылаясь на имя службы:
$app->get('/', 'app.homepage_handler');
Внутренне Espresso решит эту услугу и создаст ее таким образом Lazy по умолчанию.
Каждый компонент также может получить экземпляр container.
$module = new RoutableHttpComponent(); $module->setContainer($aContainerInstance);
Другие утилиты
Экземпляр эспрессо имеет несколько общих утилит, чтобы сделать вашу жизнь проще. Я думаю о добавлении еще многих других, и было бы здорово иметь обратную связь об этом.
Сессия
Первая утилита-это возможность идентифицировать только одного клиента с помощью файлов cookie, которые составляют сеанс. Podemos hacer esta llamando al método $приложение->сессия(); . Этот метод принимает три аргумента, и только первый является обязательным:
- Un секретный ключ de 32 бита. Puede ser generado en la terminal con:
php -r "echo bin2hex(random_bytes(16));" - Имя файла cookie сеанса. По умолчанию это
_espresso. - Время истечения срока действия контракта со строкой/| Дата и время
. По умолчанию это+1 неделя.
Важно отметить, что обработка сеанса в Espresso не использует собственный обработчик PHP, а шифрует string json , который сохраняет данные сеанса в файле cookie на стороне клиента. Любые изменения немедленно обнаруживаются, что повторяет сеанс и аннулирует любую предыдущую аутентификацию. Если сеанс изменен, файл cookie снова устанавливается.
Преимуществом этого метода является его простота, эффективность, безопасность и масштабируемость. Недостатком является то, что вы не можете поместить слишком много данных в сеанс, поскольку файлы cookie имеют довольно ограниченную емкость.
Анализаторы тела
Если вы создаете REST Api или обрабатываете input форм, Espresso предоставляет метод для быстрой настройки parsing//тела//request . Просто вызовите метод//$app – >parseBody () |/и передайте ему string, либо//json o form (или оба), вы автоматически получите свой input доступный как массив в el método Интерфейс запроса сервера::getParsedBody() .
$app->parseBody('json');
” Вы можете внести свой вклад!”
Есть еще несколько вещей, которые я хотел бы добавить в эспрессо, и я очень хочу услышать идеи! Если у вас есть какие-либо feature, которые вы хотите предложить, вы можете открыть issue//в репозиторий Github или вы можете установить пакет composer и немного поиграть с фреймворком.
Пока вы это делаете, я буду писать модульные тесты и добавлять некоторые дополнительные features. Как только я получу 90% coverage (что, вероятно, будет менее чем через две недели), я выпущу версию 1.0.0-rc1 . В середине Июня я надеюсь, что смогу сделать запуск 1.0.0 .
Оригинал: “https://dev.to/mnavarrocarter/introducing-espresso-4p14”