Статьи

Sourcehunt: PHP7-Only альтернатива Laravel, HPKP и многое другое

Время снова продвигать несколько проектов с открытым исходным кодом! На этот раз у нас есть альтернатива Laravel, но та, которая требует PHP7 (круто!), Некоторые пакеты, которые действительно заботятся о проверке запросов и фильтрации параметров запросов, HPKP (обновления безопасности для всех!), Пакет, который делает ваши объекты более строгими и, наконец, угощение от людей, которые сделали Symfony!


Sourcehunt логотип


paragonie / hpkp-builder [15 ★]

Эта библиотека призвана упростить создание заголовков HTTP с открытым ключом в ваших проектах PHP и требует как минимум PHP 7.

Закрепление открытого ключа HTTP, или HPKP, — это политика безопасности, предоставляемая через заголовок ответа HTTP, очень похожий на HSTS и CSP. Он позволяет хосту предоставлять агенту пользователя информацию о том, какие криптографические идентификационные данные ему следует принимать от хоста в будущем. Это может защитить веб-сайт хоста от компрометации безопасности в Центре сертификации, где могут выдаваться поддельные сертификаты для вашего имени хоста.

Узнайте больше о HPKP здесь .


Rican7 / входящий [137 ★]

Incoming — это библиотека PHP, предназначенная для упрощения и абстрагирования преобразования неплотных, сложных входных данных в согласованные, строго типизированные структуры данных.

// Create our incoming processor
$incoming = new Incoming\Processor();

// Process our raw form/request input into a User model
$user = $incoming->process(
    $_POST,            // Our HTTP form-data array
    new User(),        // Our model to hydrate
    new UserHydrator() // The hydrator above
);

Разъяснение этой мелочи выходит за рамки этого короткого поста, но, по сути, оно позволяет нам точно определить, какой тип входной информации проходит, и увлажняет нашу модель, отвергая, фильтруя или трансформируя все остальное.

Это как Фрактал, задом наперед. (Fractal гарантирует, что вывод соответствует заданной структуре, а не вводу)

У библиотеки в настоящее время есть одна нерешенная проблема — и это обсуждение вокруг функции — но она определенно может использовать некоторых пользователей и отзывы! Может быть, даже пост SitePoint об этом?


LinioIT / вход [18 ★]

Еще один механизм фильтрации ввода, этот компонент инфраструктуры Linio (?!) Направлен на абстрагирование обработки ввода HTTP-запросов, что обеспечивает бесшовную интеграцию с моделью вашего домена. Компонент отвечает за:

  • Анализ содержимого тела запроса
  • Проверка входных данных
  • Гидратация входных данных в объекты

Таким образом, в некотором смысле, как входящие выше.

Вы используете обработчики ввода, чтобы указать, какие данные вы ожидаете от запросов:

 class RegistrationHandler extends InputHandler
{
    public function define()
    {
        $this->add('referrer', 'string');
        $this->add('registration_date', 'datetime');

        $user = $this->add('user', 'Linio\Model\User');
        $user->add('name', 'string');
        $user->add('email', 'string');
        $user->add('age', 'integer');
    }
}

и затем ссылка на это в контроллере:

 class RegistrationController
{
    public function registerAction(Request $request): Response
    {
        $input = new RegistrationHandler();
        $input->bind($request->request->all());

        if (!$input->isValid()) {
            return new Response($input->getErrorsAsString());
        }

        $data = $input->getData();
        $data['referrer']; // string
        $data['registration_date']; // \DateTime
        $data['user']; // Linio\Model\User

        return new Response(['message' => 'Valid!']);
    }
}

Библиотека также поддерживает типы, ограничения, преобразователи и многое другое — все это вы можете прочитать в документации .


mpscholten / request-parser [18 ★]

На аналогичном замечании request-parser делает что-то более легкое.

 public function index()
{
    $page = $this->queryParameter('page')->int()->required();
    $order = $this->queryParameter('order')->oneOf(['asc', 'desc'])->required();
    $createdAt = $this->queryParameter('createdAt')->dateTime()->defaultsTo(null);
}

Просто, правда? Определите обязательные и дополнительные параметры, с типами, непосредственно по вашему текущему запросу. Конечно, это еще не все, но в этом суть.

Имея всего 18 звезд, эта библиотека могла бы определенно привлекать некоторое внимание — как с точки зрения пользователей, так и с точки зрения участников / тестировщиков.


богатство / роскошь [322 ★]

Качеством может стать соревнование, которого ждал Ларавел. Это фреймворк с полным стеком с минимальным требованием PHP 7.0. Как говорят в документах:

Opulence — это фреймворк для веб-приложений PHP, который упрощает сложные части создания и поддержки безопасного, масштабируемого веб-сайта С Opulence такие вещи, как управление базами данных, кеширование, ORM, шаблоны страниц и маршрутизация, становятся все проще. Он был написан с учетом настроек, производительности и передового опыта. Благодаря разработке через тестирование (TDD), фреймворк надежен и тщательно протестирован. Opulence разделен на компоненты, которые можно устанавливать отдельно или связывать вместе.

Как и Laravel, он поставляется со своими собственными компонентами, и его автор решительно настроен сохранить его на переднем крае.

На днях в Reddit взорвалась роскошь, собирая в целом благоприятные отзывы, так что количество звезд не так низко, как в других проектах, о которых мы упоминаем в этом посте, но оно все равно может использовать участников, если мы хотим придать ему необходимую инерцию кусать за пятки Ларавела.


Zeeshanu / Yell [7 ★]

Yell — это пакет PHP, который делает ваши объекты строгими и вызывает исключения, когда вы пытаетесь получить к ним доступ или установить какое-то неопределенное свойство в них.

 use Zeeshanu\Yell\Scream;

class Person
{
    use Scream;

    public $name;
    public $age;
}

$person = new Person();

$person->name = 'John Doe';
$person->age = 23;

// An exception will be thrown when showing message "Trying to set undefined property $profession in class Person"  
$person->profession = 'Teacher';

Sensiolabs-de / deptrac [355 ★]

Deptrac — это новый инструмент от Sensiolabs (Symfony), который представляет собой инструмент статического анализа кода, который помогает применять правила для зависимостей между уровнями программного обеспечения. Что это значит конкретно? Например, вы можете определить правило типа «контроллеры могут не зависеть от моделей». Чтобы убедиться в этом, deptrac проанализирует ваш код, чтобы найти какие-либо модели использования в ваших контроллерах, и покажет вам, где это правило было нарушено.

В качестве вступления вот удобное видео, которое они подготовили:

По общему признанию, этот пакет немного менее инди, чем другие, но кажется достаточно интересным, чтобы гарантировать продвижение — мы определенно хотели бы увидеть некоторые варианты его использования в учебных пособиях. Хотите написать что-нибудь?


Вот и все на июнь — как всегда, пожалуйста, напишите нам свои ссылки с хэштегами #sourcehunt и #php — вот ссылка на комбинацию . Естественно, если вы хотите найти проект, написанный на другом языке, измените его соответствующим образом.

Удачного кодирования!