Рубрики
Uncategorized

Представляем Эспрессо

Микро-фреймворк Оон de PHP fuertemente inspirado en Express.js . С тегами php, фреймворк, http, webdev.

Когда я начал использовать 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 $приложение->сессия(); . Этот метод принимает три аргумента, и только первый является обязательным:

  1. Un секретный ключ de 32 бита. Puede ser generado en la terminal con: php -r "echo bin2hex(random_bytes(16));"
  2. Имя файла cookie сеанса. По умолчанию это _espresso .
  3. Время истечения срока действия контракта со строкой/| Дата и время . По умолчанию это +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”