PSR-7 фреймворк: Консольные команды, базы данных и ресурсы

Завершающий урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Добавляем поддержку написания консольных команд, добавляем работу с базами данных с помощью PDO и готовых ORM, оптимизируем запросы:

Исходный код на GitHub

  1. Структура и работа с HTTP
  2. Контроллеры и маршрутизация
  3. Middleware и Pipeline
  4. Контейнер внедрения зависимостей
  5. Шаблонизаторы и вёрстка
  6. Обновление до PSR-15, вывод ошибок и логирование
  7. Консольные команды, базы данных и ресурсы

Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком и поставьте скорость 1,25:

Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующих видео!


Комментарии

 

Егор

Отличное видео, вдумчиво проработанный и очень полезный материал. Мелкие уточнения:

1. NPM уже поддерживает lock файлы. Новый NPM создаёт package-lock.json и никаких yarn'ов ставить не нужно:

2. В случае с Doctrine ORM не обязательно использовать сырые запросы если нужны агрегации в запросе:

$query = $em->createQuery('SELECT u, count(g.id) FROM Entities\User u JOIN u.groups g GROUP BY u.id');
$result = $query->getResult();

И можно ничего руками не гидрировать.

Ответить

 

Max Гордиенко

Круто, спасибо.

Ответить

 

Husniddin

hello thanks this great course and please create new course(frontend(Angular or React) and backend(php, yii2 or laravel)). Many thanks Dmitriy. Your great teacher and devaloper.

Ответить

 

slo_nik

Доброе утро.
Наконец-то дождался.
Теперь можно пересматривать с первого урока)))

Ответить

 

Алексей

У диакторовского EmptyResponse, боди - is not writable. Поэтому, не плохо бы в EmptyResponseMiddleware, проводить проверку, а можем ли мы что-нибудь записать в тело, прилетевшего нам ответа? Можем - пишем в него, нет - устанавливаем в боди свой writable strim и пишем уже в него. А так как, собственно говоря, мы определили что в прилетевшем response, тело пустое, то можно обойтись и без проверки:

if ($body->getSize() === 0) {
        switch ($response->getStatusCode()) {
            case 403: $html = $this->template->render('error/403', compact('request')); break;
            case 404: $html = $this->template->render('error/404', compact('request'));
        }

        $body = new Stream('php://temp', 'w');
        $body->write($html);

        $response = $response->withBody($body);
 }
Ответить

 

rukuki

Если уже пользуетесь SplQueue, то почему бы и дальше не использовать Spl

        $directoryIterator = new \RecursiveIteratorIterator(
            new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS),
            \RecursiveIteratorIterator::CHILD_FIRST
        );

        /**
         * @var $fileInfoItem \SplFileInfo
         */
        foreach ($directoryIterator as $fileInfoItem) {
            if ($fileInfoItem->isDir()) {
                rmdir($fileInfoItem->getPathname());
            } else {
                unlink($fileInfoItem->getPathname());
            }
        }
Ответить

Оставить комментарий

Войти | Завести аккаунт


(никто не увидит)



Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>