Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ»ΡΠΆΠΈΡ ΡΠ΅Π»ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΎΡΠ½ΠΎΠ² ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° laravel, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² roadmap Π·Π΄Π΅ΡΡ: CutCode Junior Roadmap
ΠΠΈΠ΄Π΅ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
Π¦Π΅Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΎ ΠΎΡ Π²Π°ΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ laravel ΠΈ Π½Π°ΡΡΠΈΡΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° laravel.
- ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ
- ΠΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ
- Blade template
- Eloquent model
- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΡΡΡ.
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 (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΡΠΈΡ ΡΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ)
ΠΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π·Π΄Π΅ΡΡ database/migrations/tasks
- Π’Π΅ΡΡΡ
tests/Feature/MigrationsTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter MigrationsTest
Π‘ΠΎΠ·Π΄Π°ΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ categories Ρ 2 ΠΏΠΎΠ»ΡΠΌΠΈ id ΠΈ title (Π½Π΅ Π·Π°Π±ΡΡΡ ΠΏΡΠΎ timestamps)
ΠΠ»Ρ title ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ NULL
ΠΠ»Ρ active ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ TRUE
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» soft delete
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Ρ Ρ timestamps (created_at, updated_at) ΡΠ΅ΡΠ΅Π· 1 ΠΌΠ΅ΡΠΎΠ΄
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Π΅ description ΡΠΈΠΏΠ° text (DEFAULT NULL) ΠΠΠ‘ΠΠ ΠΏΠΎΠ»Ρ title
Π‘Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΠΊΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΠ»Ρ active ΠΈ Π² ΡΠ»ΡΡΠ°ΠΈ ΡΡΠΏΠ΅Ρ Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Π΅ main (boolean default false)
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π΅ title Π² name
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ posts Π² articles
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ articles ΠΈ categories (belongsToMany) c foreign ΠΊΠ»ΡΡΠ°ΠΌΠΈ
ΠΡΠ΅ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π·Π΄Π΅ΡΡ routes/web.php
ΠΈ routes/api.php
- Π’Π΅ΡΡΡ
tests/Feature/RouteTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter RouteTest
ΠΠΎ GET ΡΡΠ»Ρ /hello ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ view - /resources/views/hello.blade (Π±Π΅Π· ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°)
ΠΠΎ GET ΡΡΠ»Ρ / ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ IndexController, ΠΌΠ΅ΡΠΎΠ΄ index
ΠΠΎ GET ΡΡΠ»Ρ /page/contact ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ view - /resources/views/pages/contact.blade Ρ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠ° - contact
ΠΠΎ GET ΡΡΠ»Ρ /users/[id] ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ UserController -> ΠΌΠ΅ΡΠΎΠ΄ show Π±Π΅Π· Route Model Binding. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ id
ΠΠΎ GET ΡΡΠ»Ρ /users/bind/[user] ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ UserController -> ΠΌΠ΅ΡΠΎΠ΄ showBind Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Route Model Binding. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ user
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅Π΄ΠΈΡΠ΅ΠΊΡ Ρ ΡΡΠ»Π° /bad Π½Π° ΡΡΠ» /good
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΡ Π½Π° ΡΠ΅ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ - UserCrudController Ρ ΡΡΠ»ΠΎΠΌ - /users_crud
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠΎΡΡΠΎΠ² (Route::group()) ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ - dashboard
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΡ GET /admin -> Admin/IndexController -> index
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΡ POST /admin/post -> Admin/IndexController -> post
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠΎΡΡΠΎΠ² (Route::group()) ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ - security ΠΈ ΠΌΠΈΠ΄Π»Π²Π°ΡΠΎΠΌ auth
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΡΡ GET /admin/auth -> Admin/IndexController -> auth
ΠΠΎΠ±Π°Π²ΠΈΡΡ apiResource ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ - Api/V1/UserController
- ΠΡΠ΅ΡΠΈΠΊΡ ΡΡΠ»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ /api/v1
- ΠΠΎΠ»Π½ΡΠΉ ΡΡΠ» /api/v1/users (Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΡΡΠΎ ΡΡΠΎ api routes)
- Π’Π΅ΡΡΡ
tests/Feature/BladeTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter BladeTest
Http/Controllers/IndexController.php
ΠΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ users Π²ΠΎ view (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° users)
resources/views/table.blade.php
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ view, ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΅Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ layout
resources/views/layouts/app.blade.php
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ view Ρ ΠΌΠ΅Π½Ρ shared/menu.blade.php
resources/views/auth.blade.php
Π‘Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΡΠ»ΠΈ Π΄Π° ΡΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ
resources/views/welcome.blade.php
Π‘Π΄Π΅Π»Π°ΡΡ blade component Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ HelloWorld Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Π²ΠΎ view - Π’Π΅ΠΊΡΡΠ°Ρ Π΄Π°ΡΠ° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Y-m-d.
- ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² AppServiceProvider ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ alias Π½Π° hello
- Π ΠΈΡΠΎΠ³Π΅ alias - hello Π° ΠΊΠ»Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° App\View\Components\HelloWorld
- ΠΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ Π² ΡΠΊΠ°Π·Π°Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅
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 Π΄Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
resources/views/table.blade.php
ΠΠ΄Π΅ΡΡ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ foreach loop
- ΠΡΠ²Π΅Π΄ΠΈΡΠ΅ div Ρ $user->name
- ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $loop ΠΈ Ρ Π½Π΅ΡΠ΅ΡΠ½ΡΡ
div Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΠΊΠ»Π°ΡΡ -
bg-red-500
- Π’Π΅ΡΡΡ
tests/Feature/ModelTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter ModelTest
Models/Item.php
Π£ΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ - products
Http/Controllers/EloquentController.php
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Item ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ
select * from products where active = true order by created_at desc limit 3
Http/Controllers/EloquentController.php
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ Item scope Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² (scopeActive())
Http/Controllers/EloquentController.php
ΠΠ°ΠΉΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ id ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΠΎ view Π»ΠΈΠ±ΠΎ ΠΎΡΠ΄Π°ΡΡ 404 ΡΡΡΠ°Π½ΠΈΡΡ
Http/Controllers/EloquentController.php
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ
Http/Controllers/EloquentController.php
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ
Http/Controllers/EloquentController.php
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ
- Π’Π΅ΡΡΡ
tests/Feature/ValidationTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter ValidationTest
Http/Requests/ItemStoreRequest.php
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Ρ title
- ΠΠΎΠ»Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ
- Π‘ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅
- ΠΠΈΠ½ΠΈΠΌΠ°ΠΌ 5 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
- ΠΠ°ΠΊΡΠΈΠΌΡΠΌ 15 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
- Π’Π΅ΡΡΡ
tests/Feature/AuthTest.php
- ΠΠ°ΠΏΡΡΠΊ
php artisan test --filter AuthTest
Policies/ItemPolicy.php
Π Π°Π·ΡΠ΅ΡΠΈΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ id = 10
ΠΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ? ΠΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? ΠΠ΅ ΡΡΠ΅ΡΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΈ ΠΏΠΈΡΠΈΡΠ΅ GitHub Issues.
ΠΠ΅Π»Π°Ρ Π²ΡΠ΅ΠΌ ΡΠ΄Π°ΡΠΈ!