#097 10-06-24 Php Игорь Домашние задания

Домашнее задание 05.08

  1. Вычитать тз
  2. Создать приватный репозиторий в github и привязать к локальному с новым проектом laravel 9. Создать новую бд. Настроить подключение к бд.
  3. Спроектировать таблицы. Создать миграции, модели и сидеры.
  4. Сделать главную страницу (шаблон FlexStart).
  5. Установить пакет для авторизации, debugbar.
  6. Создать страницу Мой профиль для администратора.

Домашнее задание 02.08

  1. Дан массив фамилий. Найти кол-во однофамильцев. Например, ['ivanov', 'petrov', 'ivanov', 'petrov', 'ivanov', 'petrov'] - 6,  ['ivanov', 'petrov', 'ivanov'] - 2, ['ivanov', 'petrov'] - 0
  2. Дан массив, элементами которого являются массивы, содержащие фамилии учеников. Например, a = [['ivanov', 'petrov'], ['ivanov', 'sidorov'], ['ivanov', 'petrov', 'leonov']]. Найти учеников, которые есть в каждом подмассиве. Найти учеников, которые есть только в одном подмассиве. Найти учеников, которые есть только ровно в 2 подмассивах. Найти учеников, которые есть только в k (k - число дано) подмассивах.
  3. Написать функцию, которая на вход получает две строки с кол-вом часов и минут в формате "2 h 40 min". Найти результат суммы этих периодов времени в таком же формате. Например, дано: "1 h 40 min", "0 h 22 min".  Результат: "2 h 2 min"

Домашнее задание 31.07

  1. Прочитать при желании про паттерны Синглтон, Фабрика, Наблюдатель, Фасад и Стратегия.
  2. Потестировать Observers. Создать Observer к какой-нибудь модели (не User) и протестировать большинство из 15 стандартных событий с помощью info(...) (в .env указать daily для LOG_CHANNEL)
  3. Протестировать Events. Event создать двумя способами: через event:generate и make:event. Событие - пользователь написал сообщение (модели User и Message). Слушатель - получает от события пользователя и сообщение и пишет в лог их id и текст сообщения и далее удаляет сообщение из бд.

Домашнее задание 30.07

  1. Сделать сохранение фильтра (по возможности параметры в сессию как массив)
  2. Рефакторинг контроллера пользователей: сервис
  3. Написать функцию isList(), которая определяет, является ли данный массив строгим массивом, то есть индексы его элементов являются последовательными целыми числами, начиная с нуля. Пример, isList([4, 5, 3]) - true, isList([0 => 3, 2 => 4, 3 => 5]) - false, isList([4, 5, 'a' => 5]) - false

Домашнее задание 26.07

  1. Рекомендации по именованию для CRUD
  2. Повтор урока. Создать middleware для проверки роли администратора. Добавить для роутов администратора
  3. Сделать две формы на странице профиля. С полной валидацией и Rule
  4. Сделать выход из личного кабинета
  5. Дан массив из одинаковых по структуре массивов с любым уровнем вложенности. Например, $a = [
    ['developer' => ['id' => 1, 'name' => 'Ivan']],
    ['developer' => ['id' => 2, 'name' => 'Petr']],
    ]; Написать функцию pluck(), которая из данного массива получается одномерный массив из значений, путь к которым указан в виде строки из ключей через точку. Например, plain($a, 'developer.name') вернет массив ['Ivan', 'Petr']

Домашнее задание 22.07

  1. Прочитать статью про транзакции. Поэкспериментировать (обернуть в транзакцию любые два запроса к бд, искусственно вызвать исключение). Написать два способа транзакции.
  2. Повтор действия с урока по входу в личный кабинет

Домашнее задание 19.07

  1. Написать консольную команду, которая удаляет всех мягко удаленных пользователей.
  2. Написать консольную команду, которая добавляет в бд фейковых пользователей. Команда запрашивает у пользователя кол-во пользователей. Сделать проверку на валидность введенного кол-ва (от 1 до 100).
  3. Написать команду, которая удаляет 10 мягко удаленных сущностей. Название сущности передается при вызове команды. Например, php artisan del:soft user Поставить команды в расписание - каждый час. Протестировать. Усовершенствовать команду  - можно передать несколько сущностей при вызове.
  4. Прочитать статьи про исключения: первая и вторая. Поэкспериментировать, проверить какой-нибудь пример из статей.
  5. С прошлого дз - кастомное правило валидации на пароль
  6. Дан массив чисел. Выполнить сортировку по четности, то есть сначала должны идти четные, потом нечетные. Можно использовать usort.
  7. Дан двумерный массив. Например, $a=[[100,100],[1,2,3],[4,5],[0,-1],[1,2,3,4,5]]; Переставить элементы массива $a так, чтобы их суммы чисел возрастали. То есть $a=[[0,-1], [1,2,3],[4,5],[1,2,3,4,5],[100,100]];

Домашнее задание 12.07

  1. Сделать кнопки для мягкого удаления и полного удаления. Показывать всех пользователей (в том числе и удаленных). Для удаленных пользователей кнопка Восстановить.
  2. Написать функцию, которая определяет, является ли пароль простым. Пароль простой, если менее 8 символов, или содержит менее 4 различных символов, или состоит только из цифр, или содержит 'qwerty' или 'password'

Домашнее задание 10.07

  1. Пользователь заходит на страницу и видит кол-во посещений данной страницы и дату и время последнего посещения. Реализовать с помощью сессий и функции date('d.m.y H:i:s') - возвращает строку с текущей датой и временем

Домашнее задание 02.07

  1. Дан двумерный массив чисел. Например, [[1, 2, 3], [4, 5], [6, 7, 8, 9]]; В каждом подмассиве поменять местами наименьший и наибольший элементы.
  2. Известно, что a_1 = 0, a_2=2 и a_n=3a_{n-1}-2a_{n-2}+1. Найдите a_{20}

Домашнее задание 01.07

  1. Создать массив в php. Перегнать в json и обратно с помощью json_encode/_decode. Вывести промежуточный и итоговый результат.
  2. В произвольной модели создать два аттрибута (getSomeNameAttribute). Протестировать
  3. В модель doctor (из предыдущего дз) добавить soft deleting (добавить через миграцию столбец, добавить трейт). Протестировать: мягко удалить конкретного доктора, удалить доктора из базы, написать два запроса - один с игнорированием удаленных, второй - с учетом удаленных.
  4. Создать trait Nameable с методом, который выводит $this->name большими буквами. Подключить трейт в модели, где есть name. Протестировать.
  5. Протестировать casts для boolean
  6. Дан многомерный массив чисел. Например, [1, 2, [3, [4, 5]], 6, [7], [8, 9]]. Найти кол-во чисел в массиве.

Домашнее задание 29.06

  1. Создать таблицу managers (имя, фамилия, email) и drivers (имя, фамилия, телефон). Таблицу cars использовать старую. Создать связи - у каждого водителя есть один менеджер и одна машина. Добавить менеджера, двух водителей, две машины. Привязать к водителям менеджера и машину. Получить менеджера из бд и показать его водителей. Получить водителя из бд и показать его менеджера и машину
    1. Создать миграцию для таблицы doctors - хранит данные о врачах: фамилия, имя, отчество, год рождения, специальность, кол-во пациентов, кол-во лет работы, описание, created_at, updated_at.
    2. Создать сидер для заполнения таблицы 100 записей.
    3. Создать роут и новый контроллер для запросов
    4. У доктора с id = 5 изменить год рождения на 1975 и кол-во пациентов на 100.
    5. Удалить доктора с id=5
    6. У всех докторов, год рождения которых от 1980 до 1990 включительно обнулить кол-во пациентов
    7. Удалить всех докторов, у которых кол-во пациентов меньше 5
    8. Удалить всех докторов, у которых фамилия заканчивается на 'ов' и у которых специальность 'стоматолог'
    9. Найти кол-во всех докторов
    10. Найти кол-во докторов, у которых стаж работы больше 20 лет
    11. Найти какой наибольший стаж у докторов
    12. Найти среднее кол-во пациентов у докторов специальности 'хирург'
    13. Найти наименьший год рождения у докторов, у которых пациентов от 10 до 20 и специальность или хирург, или стоматолог

Домашнее задание 26.06

  1. Прочитать про отношения статью и документацию
  2. Прочитать про жадную загрузку (понять +-)
  3. В таблицу students добавить user_id на пользователя через миграцию. То есть несколько студентов привязаны к пользователю (менеджеру). В моделях User и Student добавить отношения. Поэкспериментировать с вызовом отношений и др. свойства (привязка и т.п.) по документации
  4. Добавить таблицы cars и owners. Связать их через pivot-таблицу car_owner. Поэкспериментировать с detach, sync и др.

Домашнее задание 24.06

  1. Carbon - все задачи Документация
  2. Получить всех студентов которые (с фамилией Ivanov или годом 2000) и (id > 3 или id = 1)

Домашнее задание 21.06

  1. Повторить код с урока локально и сделать форму для подписчиков

Домашнее задание 19.06

  1. Глянуть про faker
  2. Книга по php (в тг) Гл.2-4 прочитать
  3. Написать seeder для студентов
  4. Получить из бд список студентов
    1. всех
    2. всех упорядоченных по году
    3. всех упорядоченных по году в обратном порядке
    4. первые три студента, у которых год равен 2000
    5. первый студент, у которого год от 2020 до 2023
    6. все студенты с фамилией Ivanov и годом 2020
    7. количество студентов с фамилией Ivanov и годом 2020
    8. существует ли студент с фамилией Ivanov
    9. наибольший год у студентов с фамилией Ivanov
    10. студента у которого id равен 5
    11. все студентов у которых id < 10 или id < 4
    12. студентов с 3 по 7 с фамилией Ivanov и годом 2020

Домашнее задание 17.06

  1. По диагонали глянуть статью про миграции (или найти в русской документации)
  2. Создать миграцию для таблицы students. Таблица содержит столбцы name - имя студента, surname - фамилия, year - год рождения, address - адрес. Для выполнения миграции использовать команду php artisan migrate Файл миграции можно создать как копию файла миграции users и изменить в названии файла дату. Миграции находятся в database/migrations
  3. Создать модель Student. Модели находятся в app/Models.
  4. Создать роут и контроллер. Добавить несколько студентов в бд через Eloquent. Получить из бд а) всех студентов б) всех студентов 1995 года рождения.

Домашнее задание 14.06

  1. Прочитать бегло статьи про массивы и строки
  2. Задачи 42, 44, 45, 77
  3. Задачи на строки 8, 16, 32, 36, 44

Домашнее задание 12.06

  1. Статья про MVC
  2. Дорешать задачи с прошлого дз. Каждая задача с отдельным роутом и контроллером

Домашнее задание 10.06

  1. Посмотреть по диагонали статью про сравнение
  2. Задачи 42, 44
  3. Задачи 25, 27, 33, 38, 51, 52
  4. Задачи 8, 30