# Laravelda kod yozishning avtomatlashtirish va tezligini oshirish - Artisan sizning eng yaqin do'stingiz

Forumlar va turili chatlarda dasturchilar Laravel freymvorkini boshqa freymvorklar bilan tez-tez taqqoslanadigan muhokamlarni juda ko'p uchratishimiz mumkin. Bu maqolada Laravelni boshqa freymvorklar bilan solishtirishgani emas, balki Laravelning afzalliklarini ko'rsatishga va menda eng katta, shubhasiz ijobiy taassurot qoldirgan narsalarni tasvirlashga e'tibor qaratmoqchiman.

## **Artisan haqida**

Artisan bu Laravelning CMD yoki terminal orqali yordamchisi hisoblanadi. Artisan instrumenti tegishli buyrug'i yordamida siz odatda ko'p vaqt talab qiladigan ko'plab ishlarni tezda bajarishingiz mumkin. Aynan qaysi ishlar ekanligini quyidagi keltirib o'taman.

## **Frontend sozlamalari/ Laravel UI**

Kerakli frontend texnologiyalarni loyihangiz uchun sozlash ba'zida ko'p vaqt talab qilishi mumkin ayniqsa bu ish yangi loyiha boshlayotganizda kerak bo'lib qolsa. Laravelda loyiha boshlayotganizda quyidagi 3 xil frontend sozlamalarini avtomatik ravishda qo'llashingiz mumkin:

```php
php artisan preset react
```

6-versiyadan boshlab, birinchi navbatda, composer yordamida Laravel UI paketini o'rnatishingiz kerak

```php
composer require laravel/ui
```

shundan so'ng kerakli frontend sozlamalarini quyidagi kommanda yordamini o'rnatishingiz mumkin.Misol uchun:

```php
php artisan ui react
```

Shuningdek siz faqatgina shu uchta frontend sozlamalaridan tashqari o'zingiz uchun moslashtirilgan frontend texnologiyalari asosidagi konfiguratsiyali(masalan: tailwindcss) sozlamlarini o'rnatishingiz mumkin bu bo'yicha GitHub da ko'plab misollar topshiringiz mumkin.

## **Avtorizatsiya**

Hozirda deyarli barcha ishlab chiqilayotgan axborot tizimlari uchun avtorizatsiya,foydalanuvchilar registratsiyasi, parolni qayta tiklash funksionalliklariga ega bo'lishi kerak. Bu funksionalliklarni har safar noldan yaratish dasturchi uchun zerikarli va ersh tuyulishi mumkin shuning uchun ham siz laravelda oldindan tayyorlab quyilgan yechimlardan foydalanishingiz mumkin. Buning uchun siz quyidagi sodda bir qatorli kommandadan foydalanishinigiz mumkin:

```php
php artisan make:auth
```

Laravel 6- versiyasidan boshlab ui kutubxonasi orqali quyidagi kommandadan foydalanasiz:

```php
php artisan ui:auth
```

Misol uchun quyidagi foydalanuvchilar ro'yxatdan o'tishi va avtorizatsiyasi uchun routelar, viewlar va controllerlarni react componentlarni yaratib beradi:

```php
php artisan ui react –auth
```

## **Eloquent**

Eloquent bu laravelning eng katta ustunlaridan biri desam xato bo'lmaydi. Bu kutubxona ORM(<mark>O</mark>bject <mark>R</mark>elated <mark>M</mark>apping) bo'lib u ActiveRecord patterniga asoslangan holatda qurilgan. U biz uchun ma'lumotlarni bazasi bilan intuitiv(sodda, tushunarli) usulda ishlashga yordam beradi. Buning yordamida siz raw(tekt ko'rinishidagi) SQL so'rovlarini yozishni unutishingiz mumkin va ma'lumotlar bazasi bilan ishlash juda yoqimli bo'ladi. Quyida bir nechta misollar keltirilgan:

```php
User::where('firstname', 'Maqsudhkoja')→orderBy('lastname', 'DESC')→get();
```

Yuqoridagi kod biror tushunish uchun qiyinchilik talab etmasada: MB(Ma'lumotlar baza)sidan ismi "Maqsudhkoja" bo'lgan foydalanuvchilarni ularning familyasi bo'yicha saralab olib beradi. Agar siz bitta foydalanuvchini olmoqchi bo'lsangiz, yuqoridagi kodda oxirgi get() metodi o'rniga first() ishlatish kifoya:

```php
User::where('firstname', 'Maqsudhkoja')→orderBy('lastname', 'DESC')→first();
```

Shuningdek agar siz MB da qo'yilgan shartlar bo'yicha ma'lumotlar topilsa javob tariqasida 404 sahifa chiqarmoqchi bo'lsangiz findOrFail() metodidan foydalanishingiz mumkin:

```php
User::findOrFail('first_name', 'Maqsudhkoja')→orderBy('last_name', 'DESC')→get();
```

Yuqoridagi misollar Eloquent imkoniyatlarining yuzdan biri ham emas. Siz osonga MB ga yangi ma'lumotlar qo'shishingiz, tahrirlashingiz, o'chirishingiz mumkin. MB jadvallari o'rtasidagi birga-bir (one-to-one), birga ko'p (one-to-many) yoki ko'pga ko'p bog'lanishlarni ham qo'shishingiz mumkin.

## **Migrations**

Yana bir imkoniyatlarda bir bu MB da jadvalarni yaratish, tahrirlash, o'chirish haqida to'xtalib o'tmoqchiman. Ma'lumotlarni saqlash uchun siz loyihangiz MB sida yangi jadvallar yaratishingiz kerak buladi. Xuddi shu maqsad uchun ma'lumotlarni o'zida aks ettiruvchi Model ham yaratish zarurati bor. Bularni siz yagona artisan kommanda orqali qilishingiz mumkin:

```php
php artisan make:model Product –migration
```

Product.php model klassi app/model’s (Laravel 7 undan yuroqi versiyalarda) papkasida yaratiladi. Kommandagi – migration attribute modelga qo'shib uning migratsiyasini yaratish kerakligini bildiradi va u database/migration papkasida joylashgan bo'ladi. Bu faylda ikki up() hamda down() metodlari bo'lib masalan u quyidagicha ko'rinishda bo'ladi:

```php
public function up()

{

   Schema::create('products', function (Blueprint $table) {

      $table->id();

      $table->string('name');

      $table->text('description');

      $table->float('price');

      $table->integer('stock');

      $table->tinyInteger('isActive');

      $table->timestamps();

   });

}
```

`timestamps` metodi jadvalga avtomatik ravishda yaratilganda yoki ma'lumotlar yangilanganda to'ldiriladigan `created_at` va `updated_at` ustunlarini qo'shadi.

Shundan so'ng quyidagi buyruq yordamida siz jadvalni ma'lumotlar bazasiga migratsiya qilishingiz mumkin:

```php
php artisan migrate
```

yoki

```php
php artisan migrate:fresh
```

oldingi eski ma'lumotlarni barchasini o'chirish va jadval strukturasni qaytadan noldan yaratish uchun yuqoridagi buyruqni ishlatsangiz bo'ladi.

## **Database seeders**

Ko'pincha loyihalarni yaratganimizda mijozlar bilan ishlashimiz yoki loyihani testlashimiz uchun demo ma'lumotlar(masalan: foydalanuvchilar,mahsulotlar yoki yangiliklar va shunga o'xshash) kerak bo'ladi. Buning uchun biz yordam beradigan PHPning Faker nomli kutubxonasi mavjud bo'lib bu kutubxona yordamida Laravelda loyihani demo ma'lumotlar bilan to'ldirishda yordam beradigan tayyor yechimlar mavjud. Masalan ma'lumotlar bazasiga 1000 ta foydalanuvchini loyihani testlash maqsadida qo'shishingiz kerak.

Birinchi qiladigan ishimiz bu quyida keltirilgan buyruq yordamida foydalanuvchilarni generatsiya qilib beruvchi Factory classimizni yaratib olamiz:

```php
php artisan make:factory UserFactory -m User
```

Shundan so'ng siz loyihaning `database/factory` papkasida yangi `UserFactory.php` fayl yaratilganini ko'rishingiz mumkin. Bu fayl ichida `definition()` metodini ichida foydalanuvchilar jadvalida to'ldirilishi kerak bo'lgan ustunlarning tiplari va xarakteristikalarni kiritib chiqasiz.Masalan:

```php
public function definition()

{

   return [

      'first_name' => $this→faker→firstName,

      'last_name' => $this->faker->lastName,

      'email' => $this->faker->unique()->safeEmail,

      'email_verified_at' => now(),

      'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',

// password

      'remember_token' => Str::random(10),

   ];

}
```

E'tibor bering ustunlar nomini kiritayotgangizda uning nomi ma'lumotlar bazasidagi mos ustunlar nomi bilan birga bir to'g'ri kelishi shart.

Keyingi bosqichda seeder classimizni yaratamiz. Albatta buning uchun artisan buyrug'ini ishlatamiz.

```php
php artisan make:seeder UsersTableSeeder
```

`database/seeders/UsersTableSeeder.php` yangi yaratilgan faylda run() metodida nechta foydalanuvchi yaratish kerakligini kiritishingiz kerak bo'ladi.

```php
public function run()

{

   \App\Models\User::factory()->count(100)->create();

}
```

`database/seeders/DatabaseSeeder.php` run() metodini ichida yaratga seeder classinimiz chaqirib qo'yamiz

```php
public function run()

{

   $this->call(UsersTableSeeder::class);

}
```

Seederni ishlatish uchun artisan buyrug'idan foydalanishingiz kerak:

```php
php artisan db:seed
```

## **Pochta xabarlarni jo'natish**

Yaxshi dizayn qilingan elektron pochta xabarlarini loyihangizda ishlab chiqish soatlab vaqt olishi mumkin. Shunga qaramay Laravel bu ish maksimal darajada sodda ko'rinishiga keltirilgan. Albatta buning uchun quyidagi artisan buyruqni ishlatishingiz mumkin:

```php
php artisan make:mail HelloWorldMail –markdown emails.hello-world
```

Buyruq muvofaqqiyatli bajarilsa ikki fayl yaratadi . Birinchisi: `resources/views/mails/hello-world/blade.php` faylda siz xabar ko'rinishida tahrirlashingiz mumkin. Ikkinchi faylda `\App\Mail\HelloWorldMail` class yaratilgan, Bu class yordamida siz xabarlarni jo'natishingiz mumkin. Shuning bu class ichidagi siz view faylga kerakli o'zgaruvchilar berib yuborishingiz mumkin.

Mailgun yoki mailtrap kabi servislarni integratsiya qilish ham sodda ko'rinishda bo'lib odatda o'sha servislarning login parollarini .env faylga kiritish yetarli.

## **Telescope**

Nihoyat yana bitta yordamchi kutubxonalardan biri loyihangizni debug qilishga va optimizatsiyasi uchun katta yordam beradigan Telescope kutubxonasi o'rnatamiz. Telescope yordamida siz loyinhangiz orqa fonida bo'layotgan barcha hodisa va jarayonlartni kuzatib bora olasiz. Quyidagi 3 ta buyruq yordamida loyihangizga bu kutubxonani o'rnatishingiz mumkin:

```php
composer require laravel/telescope
```

```php
php artisan telescope:install
```

```php
php artisan migrate
```

Shundan so'ng loyihangiz asosiy manzilidan kegin `/telescope` path ni kiritib `Enter` ni bosing.

## **Xulosa**

[Simplex](https://simplex.uz) kompaniyasida biz loyihalarimizda asosiy php framework sifatida ishlatamiz. Yuqoridagi keltirilgan ma'lumotlarni ish faoliyatingiz davomida ishlatimishingiz orqali vaqtingiz tejashingiz va loyiha ishlab chqiish jarayonlaringizni soddalashtirishingiz mumkin. Qolaversa faqatgina artisan buyruqlari bilan kod sifati hamda tezligigizni oshira olmaysiz, bundan tashqari Laravel dokumentatsiyasi bilan ishlashi, google dan qidirish, stackoverflowdan,turli forumlardan masalan laracasts dan foydalanishini o'rganish. Qisqasi o'rganish va o'rgangan bilimlarningizni amalyotda qo'llashdan to'xtab qolmang. Kasb cho'qqilarni zabt eting.
