Code Monkey home page Code Monkey logo

laravel-check-my-skill-test's Introduction

Тест на знание основ laravel

Репозиторий служит целью проверки знаний основ фреймворка laravel, в рамках тем указанных в roadmap здесь: CutCode Junior Roadmap

Видео инструкции

Цель создания такого тестирования было охватить базовые разделы laravel и научиться на практике покрывать тестами проект на laravel.

Оглавление по темам

  1. Миграции
  2. Маршрутизация
  3. Blade template
  4. Eloquent model
  5. Валидация
  6. Аутентификация

Для начала необходимо развернуть проект на котором будут выполняться тесты.

Установка

  • composer install
  • php artisan key:generate
  • .env с реквизитами mysql базы данных
  • КРАЙНЕ ВАЖНО ЧТОБЫ БАЗА ДАННЫХ НАЗЫВАЛАСЬ laravel_skill_test

Потребуется

  • php >= 7.3
  • mysql

Проверка

  • php artisan test --filter MigrationsTest
  • php artisan test --filter RouteTest
  • php artisan test --filter BladeTest
  • php artisan test --filter ModelTest
  • php artisan test --filter ValidationTest
  • php artisan test --filter AuthTest
  • php artisan test

Инструкции

Искать задачи можно по фильтру TODO в IDE (игнорируя директорию /storage), либо по списку заданий

Подтверждение выполнения теста

PR в ветку master (автоматически запустит тест проверки)

Задания

1) Миграции

Все задания находятся здесь database/migrations/tasks

  • Тесты tests/Feature/MigrationsTest.php
  • Запуск php artisan test --filter MigrationsTest

Задание 1: Новая таблица

Создать в базе данных таблицу categories с 2 полями id и title (не забыть про timestamps)


Задание 2: Nullable

Для title указать что значение по умолчанию NULL


Задание 3: Значение по умолчанию

Для active указать что значение по умолчанию TRUE


Задание 4: Soft Deleting

Добавить функционал soft delete


Задание 5: Timestamps

Добавить поля с timestamps (created_at, updated_at) через 1 метод


Задание 6: Новое поле с указанием порядка

Добавить поле description типа text (DEFAULT NULL) ПОСЛЕ поля title


Задание 7: Проверка наличия поля

Сделать провеку на наличие поля active и в случаи успеха добавить поле main (boolean default false)


Задание 8: Переименовать поле

Переименовать поле title в name


Задание 9: Переименовать таблицу

Переименовать таблицу posts в articles


Задание 10: belongsToMany

Добавить таблицу для связи articles и categories (belongsToMany) c foreign ключами


2) Маршрутизация (Route)

Все задания находятся здесь routes/web.php и routes/api.php

  • Тесты tests/Feature/RouteTest.php
  • Запуск php artisan test --filter RouteTest

Задание 1: View

По GET урлу /hello отобразить view - /resources/views/hello.blade (без контроллера)


Задание 2: Controller

По GET урлу / обратиться к IndexController, метод index


Задание 3: View с наименованием роута

По GET урлу /page/contact отобразить view - /resources/views/pages/contact.blade с наименованием роута - contact


Задание 4: Параметры

По GET урлу /users/[id] обратиться к UserController -> метод show без Route Model Binding. Только параметр id


Задание 5: Model Binding

По GET урлу /users/bind/[user] обратиться к UserController -> метод showBind но в данном случае используем Route Model Binding. Параметр user


Задание 6: Редирект

Выполнить редирект с урла /bad на урл /good


Задание 7: Resource controller

Добавить роут на ресурс контроллер - UserCrudController с урлом - /users_crud


Задание 8: Группировка

Организовать группу роутов (Route::group()) объединенных префиксом - dashboard


Задание 9: Группировка подзадачи

Добавить роут GET /admin -> Admin/IndexController -> index


Задание 10: Группировка подзадачи

Добавить роут POST /admin/post -> Admin/IndexController -> post


Задание 11: Middleware

Организовать группу роутов (Route::group()) объединенных префиксом - security и мидлваром auth


Задание 12: Middleware подзадачи

Добавить роут GET /admin/auth -> Admin/IndexController -> auth


Задание 13: ApiResource (routes/api.php)

Добавить apiResource контроллер - Api/V1/UserController

  • Префикс урла должен быть /api/v1
  • Полный урл /api/v1/users (не забывайте что это api routes)

3) Blade template

  • Тесты tests/Feature/BladeTest.php
  • Запуск php artisan test --filter BladeTest

Задание 1: Передать данные во view

Http/Controllers/IndexController.php Передайте users во view (название ключа users)


Задание 2: Layout

resources/views/table.blade.php Изменить реализацию этой view, расширить ее с использованием layout


Задание 3: Include

resources/views/layouts/app.blade.php Подключите view с меню shared/menu.blade.php


Задание 4: Auth

resources/views/auth.blade.php Сделать проверку авторизован пользователь или нет. Если да то вывести ID пользователя. ID пользователя вывести внутри конструкции с проверкой


Задание 5: Component

resources/views/welcome.blade.php Сделать blade component с названием HelloWorld с содержимым во view - Текущая дата в формате Y-m-d.

  • Обязательное условие добавить регистрацию компонента в AppServiceProvider и изменить его alias на hello
  • В итоге alias - hello а класс компонента App\View\Components\HelloWorld
  • Вывести его в указаном месте

Задание 6: Each

resources/views/table.blade.php В эту view с контроллера передается collection c users в переменной data.

  • Выполнить foreach loop в одну строку (специальная директива)
  • Используйте view shared/user.blade.php для item (переменная user во item view)
  • Используйте view shared/empty.blade.php для состояния когда нет элементов

Задание 7: ForEach

resources/views/table.blade.php Здесь сделайте классический foreach loop

  • Выведите div с $user->name
  • Воспользуйтесь переменной $loop и у нечетных div выведите класс - bg-red-500

4) Eloquent Models

  • Тесты tests/Feature/ModelTest.php
  • Запуск php artisan test --filter ModelTest

Задание 1: Таблица

Models/Item.php Указать что таблица у модели - products


Задание 2: Basic query

Http/Controllers/EloquentController.php С помощью модели Item реализовать запрос

  • select * from products where active = true order by created_at desc limit 3

Задание 3: Scopes

Http/Controllers/EloquentController.php Добавить в модель Item scope для фильтрации активных продуктов (scopeActive())


Задание 4: 404

Http/Controllers/EloquentController.php Найти пользователя по id и передать во view либо отдать 404 страницу


Задание 5: Create

Http/Controllers/EloquentController.php Выполнить простое добавление новой записи


Задание 6: Update

Http/Controllers/EloquentController.php Выполнить простое обновление записи


Задание 7: Delete

Http/Controllers/EloquentController.php Выполнить массовое удаление записей

5) Валидация

  • Тесты tests/Feature/ValidationTest.php
  • Запуск php artisan test --filter ValidationTest

Задание

Http/Requests/ItemStoreRequest.php Добавить правила валидации для поля title

  • Поле обязательно
  • Строковое
  • Минимам 5 символов
  • Максимум 15 символов

6) Аутентификация

  • Тесты tests/Feature/AuthTest.php
  • Запуск php artisan test --filter AuthTest

Задание

Policies/ItemPolicy.php Разрешить добавление продуктов только пользователю с id = 10

Возникли сложности

Есть предложения? Возникли какие-либо проблемы? Не стестняйтесь и пишите GitHub Issues.

Желаю всем удачи!

laravel-check-my-skill-test's People

Contributors

ilysharusher avatar lee-to avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.