2 β O'rnatish va muhit¶
β¬ οΈ Oldingi: 01 β Laravel nima va nega kerak? Β· π README Β· Keyingi: 03 β Routing β marshrutlash β‘οΈ
Bu bobda: Laravel bilan ishlash uchun kerakli muhitni β PHP 8.4, Composer va bazani tayyorlaymiz; loyihani ikki xil yo'l bilan yaratamiz (
composer create-projectvalaravel new);php artisan servebilan ishga tushiramiz; slim (11+) loyiha strukturasini papka-papka aylanib chiqamiz;.envfayli,APP_KEYva sozlamalarning.env -> config -> ilovaoqimini tushunamiz;artisanbuyruqlar vositasi bilan tanishamiz va birinchi sahifani o'z qo'limiz bilan o'zgartiramiz.
Muammo¶
1-bobda Laravel nima ekanini va nega kerakligini bildik. Endi tabiiy savol tug'iladi: "Yaxshi, qayerdan boshlayman? Qaysi tugmani bosaman?"
Sof PHP'da hammasi oddiy edi: bitta index.php yaratasiz, brauzerda ochasiz β tamom. Laravel'da esa bitta fayl emas, butun bir tizim β yuzlab fayl, papkalar, sozlamalar bir-biriga bog'langan. Bu ko'pchilikni qo'rqitadi: "Bu murakkab loyihani qanday o'rnataman? Kompyuterimga nima kerak? Qaysi papka nima uchun?"
Yaxshi xabar: Laravel'ni o'rnatish bitta buyruq. Yomon "xabar" yo'q β sizga faqat uchta narsa kerak: PHP, Composer (PHP paketlar menejeri β npmning PHP'dagi ukasi) va baza (MySQL yoki hatto fayl ko'rinishidagi SQLite). Shu uchtasi tayyor bo'lsa, bitta buyruq yozasiz va ishlaydigan loyiha qo'lingizda paydo bo'ladi.
Bu bobda muhitni nol'dan tayyorlaymiz, loyihani yaratamiz va uning ichini ochib, "qaysi papka nima qiladi"ni tinch ko'ngil bilan o'rganamiz. Bob oxirida sizda ishlaydigan Laravel sayti va uni o'zgartirishga ishonchli qo'l bo'ladi.
Kerakli vositalar¶
Laravel 13 (2026) zamonaviy PHP'ga tayanadi. Loyiha boshlashdan oldin uchta narsa kerak:
| Vosita | Nima uchun | Versiya |
|---|---|---|
| PHP | Laravel'ning o'zi PHP'da yozilgan | 8.2+ (tavsiya: 8.4) |
| Composer | Laravel va paketlarni yuklab beradi | 2.x |
| Baza | Ma'lumot saqlash uchun | MySQL / MariaDB / SQLite / PostgreSQL |
Avval ular o'rnatilganini tekshiramiz. Terminal (Windows'da PowerShell yoki Terminal) oching va yozing:
Natija taxminan shunday bo'lishi kerak:
π Agar php yoki composer "topilmadi" (command not found) desa β ular o'rnatilmagan yoki PATHga qo'shilmagan. Eng oson yechim β pastdagi Laravel Herd (u PHP'ni ham, Composer'ni ham o'zi bilan olib keladi). PHP'ning o'zini alohida o'rnatish kerak bo'lsa, PHP kitobidagi o'rnatish bobiga qarang β bu yerda PHP asoslarini takrorlamaymiz.
π‘ Versiya raqamlari aniq bir xil bo'lishi shart emas. Muhimi: PHP 8.2 dan yuqori, Composer 2.x bo'lsin. Laravel 13 PHP 8.2 ni minimum talab qiladi, lekin 8.4 da eng yangi imkoniyatlardan foydalanasiz.
Baza haqida: SQLite β eng oson boshlanish¶
Boshlovchilar ko'pincha "MySQL o'rnatish"da qoqiladi. Yaxshi xabar: Laravel 11+ da yangi loyiha default'da SQLite ishlatadi. SQLite β bu alohida server emas, oddiy bitta fayl (database/database.sqlite). Hech narsa o'rnatmasangiz ham loyiha ishlayveradi. MySQL'ni keyinroq, 7-bobda baza bilan jiddiy ishlay boshlaganda ulaymiz.
Lokal muhit variantlari¶
PHP'ni "qo'lda" o'rnatish o'rniga, hammasini bitta paketda beradigan tayyor vositalar bor. Tanlovni soddalashtiramiz:
| Variant | Kim uchun | Platforma | Izoh |
|---|---|---|---|
| Laravel Herd | Boshlovchilar (tavsiya) | Windows, macOS | PHP + Composer + serverni bir bosishda beradi, bepul |
| Laravel Sail | Docker yoqtirganlar | Hamma (Docker kerak) | Konteynerlarda izolyatsiya, jamoa uchun bir xil muhit |
| Laravel Valet | macOS dasturchilari | faqat macOS | Yengil, tezkor, lekin Mac'ga bog'liq |
π‘ Tavsiya: Windows yoki Mac'da yangi boshlayotgan bo'lsangiz β Herd'ni oling. herd.laravel.com dan yuklab, o'rnatasiz: u PHP, Composer va laravel buyrug'ini avtomatik sozlaydi. Keyin pastdagi buyruqlar darrov ishlaydi.
π Sail β Docker konteynerida ishlaydi. Uning afzalligi: jamoadagi har bir dasturchida bir xil PHP/MySQL versiyasi bo'ladi ("mening kompyuterimda ishlaydi" muammosi yo'qoladi). Lekin Docker'ni bilish kerak β boshlovchi uchun biroz ortiqcha. laravel new myapp paytida Sail'ni tanlash mumkin, yoki mavjud loyihaga php artisan sail:install bilan qo'shasiz.
π Valet faqat macOS'da ishlaydi. Engil va tez, lekin Windows foydalanuvchilari uchun emas.
Loyihani yaratish¶
Muhit tayyor. Endi ikkita yo'l bor β ikkalasi ham bir xil natija beradi.
1-yo'l: laravel new (eng qulay)¶
Herd o'rnatsangiz yoki global Laravel installer'ingiz bo'lsa:
Bu interaktiv: starter kit kerakmi (auth bilan), qaysi test framework (Pest/PHPUnit), qaysi baza β so'raydi. Boshlash uchun hammasi default ("none" / "SQLite" / "Pest") bo'laversin β keyin istalganini qo'shamiz.
Agar installer bo'lmasa, uni bir marta o'rnatib qo'yasiz:
2-yo'l: composer create-project (har doim ishlaydi)¶
Faqat Composer bo'lsa kifoya β qo'shimcha hech narsa kerak emas:
Bu buyruq blog nomli papka yaratadi, Laravel'ning eng so'nggi barqaror versiyasini yuklaydi, kerakli paketlarni o'rnatadi va APP_KEYni ham avtomatik generatsiya qiladi.
π blog β bu siz tanlagan papka nomi. Xohlagan nomni qo'ying: dukon, maktab, mening-saytim. Papka bo'sh joysiz, kichik harflarda bo'lgani ma'qul.
π‘ Ikkala yo'l ham ortda bir xil ishni qiladi: Composer Laravel'ning "skeletini" (laravel/laravel) yuklaydi va composer install bilan barcha bog'liqliklarni vendor/ papkasiga tushiradi. laravel new shunchaki ustiga qulayroq interfeys qo'yadi.
O'rnatish tugagach, loyiha papkasiga kiramiz:
Serverni ishga tushirish¶
Loyiha tayyor. Endi uni brauzerda ko'ramiz. Laravel ishlab chiqish (development) uchun ichki serverni o'zi bilan olib keladi:
Natija:
Endi brauzerda http://127.0.0.1:8000 ni oching β Laravel'ning chiroyli "xush kelibsiz" sahifasini ko'rasiz. Tabriklayman, sizning birinchi Laravel saytingiz ishlamoqda!
π Bu nima bo'ldi? serve mahalliy (faqat sizning kompyuteringizda ko'rinadigan) kichik server ishga tushiradi. Brauzer 127.0.0.1:8000 ga so'rov yuboradi, so'rov public/index.php ga tushadi β bu Laravel'ning yagona kirish nuqtasi. Index.php Laravel'ni "uyg'otadi", so'rovni routes/web.php ga uzatadi va javobni qaytaradi.
π Terminalni yopsangiz yoki Ctrl + C bossangiz β server to'xtaydi va sayt ochilmay qoladi. Ishlash davomida serverni ishlab turishi kerak. Yangi buyruq yozish uchun ikkinchi terminal oynasini oching.
π‘ Herd ishlatsangiz, serve ham shart emas: Herd loyihangizni avtomatik https://blog.test kabi manzilda ko'rsatadi. Lekin php artisan serve hamma joyda, har qanday sozlamada ishlaydi β shuning uchun kitobda asosan shuni ishlatamiz.
β "127.0.0.1:8000 javob bermayapti" β ehtimol server ishga tushmagan (terminalga qarang) yoki 8000-port band. Boshqa portda ishga tushiring:
Loyiha strukturasi (slim 11+)¶
Endi loyihaning ichini ochamiz. Laravel 11+ da struktura ataylab soddalashtirilgan (slim): eski versiyalardagi ko'plab "qoziq" fayllar (mas. app/Http/Kernel.php, app/Console/Kernel.php) olib tashlangan. Bu boshlovchi uchun ayni muddao β chalg'ituvchi fayllar kamaygan.
Asosiy papka va fayllar, vazifasi bilan:
| Joy | Nima uchun |
|---|---|
app/ |
Ilovangiz mantig'i: app/Models/ (Eloquent modellar), app/Http/Controllers/ (kontrollerlar) |
routes/ |
Manzil-marshrutlar: web.php (sahifalar), console.php (artisan buyruqlar, scheduling) |
resources/ |
Foydalanuvchi ko'radigan qism: views/ (Blade shablonlar), css/, js/ |
database/ |
migrations/ (jadval tuzilmalari), seeders/, factories/ |
config/ |
Sozlama fayllar: app.php, database.php, mail.php va h.k. |
public/ |
Brauzer ko'radigan yagona papka. index.php β kirish nuqtasi |
bootstrap/ |
app.php β ilova sozlanadigan markaz (routing, middleware, exceptions) |
storage/ |
Yuklangan fayllar, log'lar, kesh, kompilyatsiya qilingan Blade |
tests/ |
Avtomatik testlar (Pest/PHPUnit) |
vendor/ |
Composer yuklab beradigan paketlar (Laravel'ning o'zi shu yerda). Git'ga tushmaydi |
.env |
Maxfiy sozlamalar (parol, kalit). Git'ga tushmaydi |
artisan |
Buyruqlar vositasi: php artisan ... |
composer.json |
Loyiha bog'liqliklari ro'yxati |
π Eng muhim qoida β public/: brauzer faqat shu papkaga kira oladi. Qolgan hamma narsa (.env, config/, app/) tashqaridan ko'rinmaydi. Shuning uchun parollaringiz .envda xavfsiz turadi. Sof PHP'da hamma fayl ochiq turardi β bu yerda xavfsizlik tuzilmaga "tikilgan".
π Slim struktura izohi: Laravel 8 va eski qo'llanmalarda app/Http/Kernel.php da middleware ro'yxatga olinardi. Laravel 11+ da bu fayl yo'q β uning o'rniga hammasi bootstrap/app.php da. Agar internetda Kernel.php haqida o'qisangiz β bu eskirgan ma'lumot, bizning versiyada boshqacha. Middleware'ni 15-bobda shu yerda sozlaymiz.
bootstrap/app.php ana shunday ko'rinadi β ilovaning "boshqaruv markazi":
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
// Bu yerda middleware sozlanadi (15-bob)
})
->withExceptions(function (Exceptions $exceptions) {
// Bu yerda xatolarni qayta ishlash sozlanadi
})->create();
Hozircha bu kodni o'zgartirmaymiz β faqat "marshrutlar shu yerda ro'yxatga olinadi, middleware shu yerda qo'shiladi" deb eslab qo'ying.
.env fayli va sozlamalar oqimi¶
Endi loyihaning eng muhim faylidan biri β .env ("environment", muhit) bilan tanishamiz. Bu fayl loyiha ildizida turadi va unda maxfiy, kompyuterga bog'liq sozlamalar saqlanadi:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=sqlite
MAIL_MAILER=log
Har bir qator β KALIT=qiymat. Keling, muhimlarini ko'rib chiqamiz:
APP_NAMEβ ilovangiz nomi (sayt sarlavhasi, email'larda ishlatiladi).APP_ENVβ muhit:local(kompyuteringizda),production(haqiqiy serverda).APP_KEYβ shifrlash kaliti (pastda batafsil).APP_DEBUGβtruebo'lsa, xatolar to'liq ko'rsatiladi (ishlab chiqishda qulay). Haqiqiy saytda doimfalseβ aks holda xato sahifalarida maxfiy ma'lumot ko'rinib qoladi.DB_CONNECTIONβ qaysi baza (sqlite,mysql, ...).
π Nega .env alohida fayl? Chunki bu sozlamalar har kompyuterda boshqacha: sizning MySQL parolingiz boshqa, serverniki boshqa. Kodni o'zgartirmasdan sozlamalarni almashtirish uchun ular .envga ajratilgan. Shuning uchun .env git'ga yuklanmaydi (.gitignoreda). Buning o'rniga .env.example β parolsiz namuna fayl β git'da turadi, jamoadagilar undan nusxa olib o'z .envlarini to'ldiradi.
β Parolingizni to'g'ridan-to'g'ri kodga yozmang: $parol = "secret123"; β bu git'ga tushib, hammaga ochiq bo'lib qoladi.
β
.envga yozing: DB_PASSWORD=secret123 β bu fayl maxfiy qoladi.
.env -> config -> ilova oqimi¶
Endi muhim tushuncha: kodingizda .envni to'g'ridan-to'g'ri o'qimaysiz. O'rtada config/ papkasi turadi. Oqim shunday:
.envda xom qiymat turadi:APP_NAME=Blog.config/app.phpunienv()orqali o'qiydi:'name' => env('APP_NAME', 'Laravel').- Ilova kodida esa siz
config()ni o'qiysiz:config('app.name').
config/app.php taxminan shunday ko'rinadi (qisqartirilgan):
<?php
return [
'name' => env('APP_NAME', 'Laravel'),
'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false),
'url' => env('APP_URL', 'http://localhost'),
'timezone' => 'UTC',
'locale' => env('APP_LOCALE', 'en'),
];
env('APP_NAME', 'Laravel') ni shunday o'qing: ".envdan APP_NAMEni ol; agar yo'q bo'lsa, Laravelni ishlat" β ikkinchi argument standart qiymat (PHP'dagi $massiv[$kalit] ?? $default qolipi bilan bir xil mantiq).
π Oltin qoida: ilova kodingizda (controller, model, Blade) doim config() ni chaqiring, env() ni emas. Sababi: php artisan config:cache ishlatilganda Laravel barcha config fayllarni bitta keshga "muzlatib" qo'yadi β shundan keyin kod ichidagi env() chaqiruvlari null qaytaradi. config() esa har doim ishlaydi. env() faqat config/ fayllari ichida o'rinli.
π‘ Sozlamani test qilish uchun php artisan tinker (interaktiv konsol) ochib ko'rishingiz mumkin:
So'ng:
Tinker β Laravel ichida jonli PHP yozish imkonini beradi. Uni 11-bobda batafsil ishlatamiz.
APP_KEY β shifrlash kaliti¶
.envdagi APP_KEY β Laravel sessiyalar, cookie'lar va shifrlangan ma'lumotni himoyalash uchun ishlatadigan maxfiy kalit. composer create-project va laravel new uni avtomatik yaratib beradi. Agar bo'sh bo'lsa (mas. git'dan klonlangan loyihada), o'zingiz generatsiya qilasiz:
Bu .envdagi APP_KEY qatorini to'ldiradi: APP_KEY=base64:....
β APP_KEY bo'sh bo'lsa, ishga tushganda shunday xato chiqadi:
β
Yechim: php artisan key:generate ishlating β xato yo'qoladi.
π Har loyihada APP_KEY noyob bo'lishi kerak va uni hech kimga bermang. Bu xuddi uyingiz kaliti: ochiq qoldirsangiz, kimdir sessiyalaringizni "ochib" qo'yishi mumkin.
artisan bilan tanishuv¶
artisan β Laravel'ning buyruq qatori yordamchisi (CLI). U routing'dan tortib jadval yaratishgacha hamma ishni terminaldan bajarib beradi. php artisan serve va php artisan key:generateni allaqachon ishlatdik. Endi to'liq ro'yxatni ko'ramiz:
Bu mavjud barcha buyruqlarni guruhlab ko'rsatadi. Eng ko'p ishlatadiganlaringiz:
php artisan serve # mahalliy serverni ishga tushirish
php artisan key:generate # APP_KEY yaratish
php artisan make:controller # yangi controller fayli yaratish
php artisan make:model # yangi model yaratish
php artisan migrate # baza jadvallarini yaratish
php artisan route:list # barcha marshrutlarni ko'rish
php artisan tinker # interaktiv PHP konsoli
Biror buyruq nima qilishini bilmasangiz, --help qo'shing:
π Diqqat: make: bilan boshlanadigan buyruqlar fayl yaratib beradi ("scaffolding"). Masalan, php artisan make:controller SalomController β app/Http/Controllers/SalomController.php faylini tayyor shablon bilan yaratadi. Bularni 4-bobdan boshlab faol ishlatamiz.
π‘ API loyihalar uchun: Laravel 11+ da yangi loyihada routes/api.php default'da yo'q. API kerak bo'lsa, bitta buyruq bilan qo'shasiz (u Sanctum'ni ham olib keladi):
Buni 17-bobda RESTful API yozganda ishlatamiz β hozircha shunday buyruq borligini bilib qo'ying.
Composer bilan paket o'rnatish¶
Laravel'ning kuchi β uning paketlar ekotizimida. Yangi imkoniyat kerakmi? Ko'pincha kimdir uni paket qilib yozib qo'ygan. Paketni o'rnatish β bitta buyruq:
Bu paketni vendor/ papkasiga yuklaydi va composer.jsonga qo'shadi. Masalan, kodingizni avtomatik tartiblaydigan Laravel Pint allaqachon yangi loyiha bilan keladi, lekin qo'lda o'rnatish ham shunday:
π --dev β "faqat ishlab chiqishda kerak, haqiqiy saytda emas" degani. Test va kod sifati vositalari odatda --dev bilan o'rnatiladi. Ular composer.jsonning require-dev bo'limiga tushadi.
π composer.json β bu loyihaning "ingredientlar ro'yxati". Loyihani boshqa kompyuterga ko'chirganingizda vendor/ni nusxalamaysiz β shunchaki composer install yozasiz, Composer composer.jsonga qarab hamma paketni qaytadan yuklab beradi. Shuning uchun vendor/ git'ga tushmaydi.
π‘ Paketlarni packagist.org dan qidirasiz β bu Composer paketlarining markaziy ombori (npmdagi npmjs.com kabi).
Birinchi o'zgartirish¶
Nazariya yetarli β endi loyihani o'zgartiramiz. Maqsad: bosh sahifani o'zgartirib, Laravel'ning ishlashini "his qilish".
routes/web.php faylini oching. Hozir u shunday ko'rinadi:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Bu shunday o'qiladi: "kimdir bosh sahifaga (/) GET so'rov yuborsa, welcome Blade shablonini qaytar". Keling, birinchi o'zgartirishni qilamiz β bosh sahifa shunchaki matn qaytarsin. welcomeni o'chirib, oddiy satr qaytaramiz:
Faylni saqlang va brauzerni yangilang (server ishlab turgan bo'lsa, qo'shimcha hech narsa qilish shart emas β Laravel o'zgarishni darrov ko'radi). Sahifada matningiz chiqadi!
Endi ikkinchi marshrut qo'shamiz β manzilning bir qismini o'zgaruvchi qilib:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return 'Salom, dunyo! Bu mening birinchi Laravel saytim.';
});
Route::get('/salom/{ism}', function (string $ism) {
return "Assalomu alaykum, {$ism}!";
});
Endi brauzerda http://127.0.0.1:8000/salom/Oqil ni oching β "Assalomu alaykum, Oqil!" chiqadi. Manzildagi {ism} qismini funksiya argumenti sifatida oldik. Bu marshrutlashning kuchi β keyingi 3-bobda buni chuqur o'rganamiz.
π view('welcome') β resources/views/welcome.blade.php faylini ko'rsatadi. O'sha faylni ochib, ichidagi HTML'ni ham bemalol o'zgartirib ko'ring (mas. <title>ni o'zgartiring). Blade shablonlarini 5-bobda batafsil o'rganamiz.
π‘ Tabriklayman! Siz endi: muhitni tayyorladingiz, loyiha yaratdingiz, serverni ishga tushirdingiz, strukturani o'rgandingiz, .envni tushundingiz va birinchi marshrutni o'z qo'lingiz bilan yozdingiz. Keyingi bobda marshrutlash (routing) β Laravel'ning yuragi β bilan jiddiy tanishamiz.
2-bob mashqlari¶
Quyidagi mashqlarni o'zingiz bajaring β yechim berilmagan. Har birini kompyuteringizda sinab ko'ring.
- Terminalda
php --versionvacomposer --versionni ishga tushiring. Versiyalaringizni daftaringizga yozib qo'ying. composer create-project laravel/laravel mashq-appbuyrug'i bilanmashq-appnomli yangi loyiha yarating.- Loyiha papkasiga kiring (
cd mashq-app) vaphp artisan servebilan ishga tushiring. Brauzerda xush kelibsiz sahifasini oching. - Serverni
--port=9000bilan boshqa portda ishga tushiring va brauzerda127.0.0.1:9000ni oching. - Serverni Ctrl + C bilan to'xtating va brauzerda yangilab, sahifa endi ochilmasligini kuzating. So'ng qayta ishga tushiring.
- Loyiha ildizidagi
.envfaylini oching.APP_NAMEqiymatini o'z ismingizga o'zgartiring va saqlang. .envdagiAPP_KEYqatoriga qarang. So'ngphp artisan key:generateishlating va kalit o'zgarganini tekshiring..envdaAPP_DEBUG=truenifalsega o'zgartiring.routes/web.phpichida ataylab xato yozib (mas.return $yoqfunksiya();) brauzerda xato sahifasi qanday ko'rinishini taqqoslang (keyintruega qaytaring).php artisan listishlating va chiqqan buyruqlardan kamida 5 tasini daftaringizga ko'chiring.php artisan route:listishlating va loyihada qanday marshrutlar borligini ko'ring.php artisan serve --helpishlating vaserveqanday qo'shimcha sozlamalarni qabul qilishini o'qing.- Loyihadagi quyidagi papkalarni oching va ichidagini ko'ring:
app/,routes/,resources/views/,config/,database/. Har biri nima saqlashini bir jumla bilan yozing. config/app.phpfaylini oching.'timezone'qatorini toping va uni'Asia/Tashkent'ga o'zgartiring.php artisan tinkeroching vaconfig('app.name')hamdaconfig('app.timezone')ni chaqiring..envda o'zgartirgan qiymatlaringiz aks etganini tekshiring.routes/web.phpda bosh sahifani (/) o'z ismingizni qaytaradigan oddiy matnga o'zgartiring.routes/web.phpga/bugunnomli yangi marshrut qo'shing β u joriy sanani qaytarsin (PHP'ningdate()funksiyasidan foydalaning).routes/web.phpga/qosh/{a}/{b}marshrutini qo'shing β u ikki sonni qo'shib natijani qaytarsin (http://127.0.0.1:8000/qosh/3/5β8).resources/views/welcome.blade.phpfaylini oching,<title>tegini o'z saytingiz nomiga o'zgartiring va brauzer yorlig'ida (tab) o'zgarishni ko'ring.composer.jsonfaylini oching varequirebo'limida qanday paketlar borligini ko'ring.laravel/frameworkversiyasini toping.- Laravel Herd va Laravel Sail haqida laravel.com hujjatlarini o'qing va o'zingizning ish muhitingiz uchun qaysi biri qulayroq ekanini, kamida 3 sabab bilan, daftaringizga yozing.