Chandler Cruttenden-in Unsplash-dakı şəkli

Laravel-də modul tətbiqetmələri necə qurmaq olar: Plug and Play Yanaşması - Hissə 2

Laravel-də modul tətbiqetmələrin qurulması haqqında bu məqalənin ilk hissəsində modullar və tətbiqlərinizi modullaşdırmağın üstünlükləri barədə ətraflı danışdıq. Bu məqalənin hissəsini burada tapa bilərsiniz: “Laraveldə Modüler Tətbiqlər necə qurulur - Bölüm 1”.

Bu ikinci hissədə Laravel-də modulların istifadəsi barədə bir az məlumat verəcəyik. Elə isə vaxt itirmədən birinci hissədə dayandığımız yerə başlayaq. Etməliyik?

Qeyd: Zəhmət olmasa bu məqalənin sonuna qədər oxumağınızı məsləhət görürəm.

Bir modulda miqrasiya yaradın

Miqrasiya, verilənlər bazanız üçün bir versiya nəzarətinə bənzəyir, beləliklə komandanız tətbiqetmə verilənlər bazası şemasını asanlıqla dəyişdirə və paylaşa bilər. Tətbiqinizin verilənlər bazası şemasını asanlıqla qurmaq üçün köçlər adətən Laravel-in şema qurucusu ilə qoşulur.

Modullar üçün miqrasiya yaratmaq heç fərqlənmir. Bir modul üçün miqrasiya yaratmaq üçün modulu istifadə edin: make-migrasiya Artisan əmri:

PHP sənətkar modulu: make-miqrasiya create_customers_table müştəriləri

Yeni miqrasiya Modul / Müştərilər / verilənlər bazası / köçlər qovluğunda saxlanılır. Laravel'in standart köçü kimi, hər köç faylının adı köçlərin sırasını təyin edən bir zaman damgası ehtiva edir.

Komutdakı Müştərilər seçimi, miqrasiyanın yaradılacağı modulun adını göstərmək üçün istifadə olunur. Adı miqrasiya yaratdığınız istənilən modula dəyişə bilərsiniz.

Çalışan miqrasiya

Bir modulun gözlənilən miqrasiyasını yerinə yetirmək üçün aşağıdakı modulu işə salın: Artisan əmrini köçürün:

PHP sənətkar modulu: Müştəriləri köçürün

Bəs tək bir əmrlə bütün modullar üçün köçəri həyata keçirmək barədə nə deyə bilərsiniz? Yaxşı ki, bu məqalənin son hissəsində danışırıq.

Bir modul üçün modellər yaradın

Hamımız bilirik ki, Laravel, varsayılan olaraq, Eloquent ORM, verilənlər bazanızla işləmək üçün sadə bir ActiveRecord tətbiqi təmin edir. Hər verilənlər bazası cədvəlində həmin cədvəllə qarşılıqlı əlaqə qurmaq üçün istifadə olunan uyğun bir "model" var. Modellərlə cədvəllərinizdəki məlumatları soruşa və cədvələ yeni qeydlər əlavə edə bilərsiniz.

Laravel-də modullarla işləyərkən eyni yanaşma.

Əvvəlcə modulumuz üçün danışıqlı bir model hazırlayaq. Modellər ümumiyyətlə standart olaraq tətbiqetmə qovluğundadır. Lakin Modullardan istifadə edirsinizsə, modellər Modullar / Müştərilər / Müəssisələr qovluğundadır. Modulun bütün Eloquent modelləri də Illuminate \ Database \ Eloquent \ Model sinfini genişləndirir.

Modulunuz üçün bir model nümunəsi yaratmağın ən asan yolu "make-model Artisan" əmrindən istifadə etməkdir:

PHP sənətkar modulu: Model müştəriləri müştəri edin

Yuxarıdakı əmrdəki müştəri seçimi modelin adı, müştəri seçimi isə modulun adıdır.

Modulunuz üçün bir model yaradan zaman verilənlər bazası miqrasiyası yaratmaq istəyirsinizsə, -m seçimindən istifadə edə bilərsiniz:

PHP Craftsman Modulu: Model müştəri-m müştəri edin

Modellər qurarkən standart Laravel adlandırma konvensiyasına əməl etdiyinizə əmin olun.

Fərqli modellərlə ünsiyyət

Ümumiyyətlə Laravel'in standart modelindən istifadə edərkən fərqli bir modelə müraciət etmək asandır. Lakin modullardan istifadə edilərkən tətbiqetmə fərqlidir.

Standart tətbiq

Ad məkanı tətbiqi;
Illuminate \ Database \ Eloquent \ Model istifadə edin.
Sınıf müştərinin genişləndirilmiş modeli {public function state () {return $ this-> belongTo ('App \ State', 'state_id'); }}

Yuxarıdakı koddan istifadə edərək tətbiq ad sahəsi vasitəsilə müəyyən bir modelin başqa bir modelinə müraciət etməyin asan olduğunu görə bilərsiniz. İndi bunun modul bir şəkildə necə həyata keçirildiyinə baxaq.

Modul tətbiqetmə

Ad məkanı tətbiqi;
Illuminate \ Database \ Eloquent \ Model istifadə edin.
Modullar \ Müştərilər \ Müəssisələr \ Vəziyyəti istifadə edin.
Sınıf müştərinin genişləndirilmiş modeli {public function state () {return $ this-> belongTo (State :: class, 'state_id'); }}

Fərqini deyə bilərsənmi? Yuxarıdakı nümunədə vəziyyət modeli müştəri modulundadır. Dövlət sinfini standart Laravel modelində istifadə etmək üçün yuxarıda göstərilən əlaqəli modula və qovluğa müraciət etməliyik.

Ancaq bir modul modelindəsinizsə və istifadəçi modeli kimi standart bir model sinfinə istinad etmək istəyirsinizsə, aşağıdakı nümunə bir rəhbər kimi istifadə olunmalıdır:

Ad məkanı modulları \ İddialar \ Müəssisələr;
Illuminate \ Database \ Eloquent \ Model istifadə edin.
Sınıf müştərinin genişləndirilmiş modeli {protected $ fillable = [];
public function profile () {return $ this-> belongTo ('App \ User', 'insurance_company_id'); }}

Yuxarıdakı nümunədən ad məkanının fərqli olduğunu görə bilərsiniz. Bunun səbəbi müştəri adlanan modulda olmağımızdır. Bir modul modelindən başlayaraq əvvəlcə açar söz istifadə etmədən standart bir modelə asanlıqla müraciət edə bilərsiniz.

Tənzimləyicidən modulla istifadə etmək

Nəzarətçini təyin edin

Aşağıda əsas modul nəzarətçi sinfinə bir nümunə verilmişdir. Nəzarətçinin Laravel-ə daxil olan əsas nəzarətçi sinifini genişləndirdiyini unutmayın:

Ad məkanı modulları \ İddialar \ Http \ Controllers;
Illuminate \ Http \ Request istifadə edin; Illuminate \ Http \ Response istifadə edin; Illuminate \ Routing \ Controller istifadə edin;
Modul \ İddialar \ Müəssisələr \ Müştəri istifadə edin.
CustomersController sinfi nəzarətçini genişləndirir {/ ** * Resursun siyahısını göstərin. * @return Response * / public function index () {return view ('customers :: customer.index'); }
/ ** * Yeni bir qaynaq yaratmaq üçün formanı göstərin. * @return Response * / public function create () {return view ('Claims :: customer.create'); }}

Əvvəlcə sizi qarışdıracaq çox şey var, amma dediyim kimi rahatlayın:

Modules \ Claims \ Http \ Controllers ad sahəsi, nəzarətçimizi modulun nəzarətçi ad sahəsinin bir hissəsi olduğunu elan edir.

Modullar \ İddialar \ Müəssisələr \ Müştəri istifadəsi yalnız müştəri modelini modul nəzarətçimizə daxil etməyə xidmət edir.

Dönüş görünüşü ("customers :: customer.index") modulu öz baxışına cavab qaytarsa ​​da, bu standart Laravel görünüşü deyil.

Müştərilər :: modulun adıdır, müştəri.index isə modulun Resources-> baxışlar qovluğundakı bir qovluqdur.

Beləliklə, modulun görünüş adının bir hissəsi olan bir görünüş göstərmək istəsəniz, yuxarıda göstərilən yanaşmanı saxlaya bilərsiniz. Ancaq standart bir Laravel görünüşü göstərmək istəyirsinizsə, aşağıdakıları edin:

geri baxış ('customers.index);

Nəzarətçi yaradın

Modullarınız üçün bir nəzarətçi yaratmaq üçün aşağıdakı əmri işə salın:

PHP ustası modulu: Müştərilər üçün Müştərilərə nəzarətçi olun

Bu əmr Modules \ Http \ Controllers qovluğunda CustomersController adı ilə bir nəzarətçi yaradır. Modulunuzun nəzarətçisində etmək istədiyiniz bütün digər tətbiqetmələr yuxarıda müzakirə edilənlər istisna olmaqla standart Laravel nəzarətçi ilə eynidir.

Toxum matkapları yaradın

Laravel, toxum siniflərindən istifadə edərək test məlumatları ilə verilənlər bazanızı toxumlamaq üçün asan bir yol daxildir. Bütün toxum sinifləri verilənlər bazası / toxum qovluğunda saxlanılır. Toxum sinifləri hər hansı bir ada sahib ola bilər, lakin ehtimal ki, aşağıdakı kimi mənalı bir konvensiyaya əməl etməlidirlər. B. UsersTableSeeder və s. Varsayılan olaraq bir DatabaseSeeder sinfi sizin üçün müəyyən edilir. Bu sinifdə, digər toxum siniflərini çalışdırmaq və beləliklə toxum əmrini idarə etmək üçün zəng metodundan istifadə edə bilərsiniz.

Ancaq modullarla işləyərkən aşağıdakı kimi kiçik fərqlər var:

Toxum matkapları yaradın

Modulu çalıştırın: bir modul üçün bir səpin yaratmaq üçün make-seeder Artisan əmri. Modul tərəfindən yaradılan bütün səpinlər Modules \ Müştərilər \ Database \ Seeders qovluğunda saxlanılır:

PHP sənətkar modulu: Seeder StatesTableSeeder Müştəriləri

Yuxarıdakı kod aşağıdakı kimi bir toxum faylı yaradır:

Ad məkanı modulları \ Müştərilər \ verilənlər bazası \ Seeders;
Illuminate \ Database \ Seeder istifadə edin; Illuminate \ Database \ Eloquent \ Model istifadə edin.
StatesDatabaseSeeder sinfi Seeder-i genişləndirir {/ ** * Verilənlər bazası toxumlarını işə salın. * * @return void * / public function run () {Model :: unguard ();
// $ this-> call ("OthersTableSeeder"); }}

Toxum sənədiniz üçün yuxarıdakı kod quruluşu ilə istədiyiniz bütün kodları birbaşa Model :: unguard () altına yerləşdirə bilərsiniz.

Modulunuzun toxum sənədlərini işə salın

Bütün toxum sənədlərinizi hazırladıqdan sonra, bütün toxum fayllarınızın modul qurulduqda yaradılan standart toxum faylında elan olunduğundan əmin olun:

Ad məkanı modulları \ Müştərilər \ verilənlər bazası \ Seeders;
Illuminate \ Database \ Seeder istifadə edin; Illuminate \ Database \ Eloquent \ Model istifadə edin.
CustomersDatabaseSeeder sinfi Seeder-i genişləndirir {/ ** * Verilənlər bazası toxumlarını işə salın. * * @return void * / public function run () {Model :: unguard ();
$ this-> call (StatesTableSeeder :: class); // Buradan başqa hər hansı bir toxum əkən maşın gedə bilər
}}

Daha sonra modulu çalıştırabilirsiniz: toxum Artisan əmri

PHP sənətkar modulu: Toxum müştəriləri

Yuxarıda göstərilən kod, müştəri modulundakı bütün başlanğıc sənədlərini işlədəcəkdir.

Modullarda marşrutlarla işləmək

Varsayılan olaraq, bütün Laravel marşrutları marşrut qovluğunda yerləşən marşrut sənədlərinizdə müəyyən edilir. Bu fayllar çərçivə tərəfindən avtomatik olaraq yüklənir. Routes / web.php faylı veb interfeysiniz üçün marşrutları müəyyənləşdirir. Bu marşrutlara sessiya statusu və CSRF qorunması kimi funksiyaları təmin edən veb orta proqram qrupu təyin edilmişdir.

Eyni quruluş modullarla işləmək üçün də tətbiq olunur. Bir modul yaratdığınız zaman avtomatik olaraq api.php və web.php ilə bir marşrut qovluğu yaradılır. Və bu fayllar da çərçivə tərəfindən avtomatik olaraq yüklənir. Bu, Modules \ Müştərilər \ Routes \ web.php faylında elan etdiyiniz hər hansı bir marşrutun qlobal olaraq əldə edilə biləcəyi deməkdir.

Aşağıda müştəri modulu üçün standart bir veb marşrut faylı var

/ * | ------------------------------------------------- - ------------------------ | Veb marşrutlar | ------------------------------------------------- - ------------------------ | | Burada tətbiqetmə üçün veb marşrutları qeyd edə bilərsiniz. Bu | Marşrutlar RouteServiceProvider tərəfindən | olan bir qrup daxilində yüklənir orta proqram qrupu "veb" ehtiva edir. İndi əla bir şey yaradın! | * /
Route :: Prefiks ('Müştərilər') -> Qrup (İşlev () {Route :: get ('/', 'CustomersController @ index');});

Beləliklə, marşrut sənədini istədiyiniz kimi düzəldə bilərsiniz.

Bütün köç və toxum modullarını tək bir Artisan əmri ilə edə bilərsiniz

Modullarla işləməyə başlayanda bir çətinlik tapdım. Tətbiqimin modülerləşdirilməsindən sonra beşdən çox fərqli modul idarə olunmalı idi. Bunu nəzərə alaraq, inkişaf müddətində bu modulların hər biri üçün miqrasiya və əkin aparılır. Bu proses həqiqətən təsirli və vaxt aparan deyildi. Tətbiqinizdəki bütün köçləri yerinə yetirən tək bir Artisan miqrasiya əmrini istifadə edərək Laravel-də bir köç keçirməyin standart yolundan fərqli olaraq. Eyni şey toxum əkənlərə də aiddir.

Beləliklə, modulumun bütün köçlərini və toxumlarını tək bir əmrlə etməyimə imkan verən xüsusi bir Artisan əmri yazdım. Yerləşdirmə zamanı bu da vacibdir.

Aşağıda göstərilən fayl özünüzü yaratmağa kömək etməlidir:

Ad məkanı App \ Console \ Commands;
Illuminate \ Console \ Command istifadə edin; Symfony \ Component \ Console \ Input \ InputArgument istifadə edin. Symfony \ Component \ Console \ Input \ InputOption istifadə edin.
AppRobot sinfi Command-ı genişləndirir {/ ** * Konsol əmrinin adı və imzası. * * @var string * / protected $ signature = 'robot: qaçaq köç';
/ ** * Konsol əmrinin təsviri. * * @var string * / protected $ description = 'Bu əmr bütün sistem və alt sistem miqrasiyasını yerinə yetirəcək';
/ ** * Yeni bir əmr nümunəsi yaradın. * * @return void * / public function __construct () {parent :: __ construct (); }
/ ** * Konsol əmrini işə salın. * * @return mixed * / public function handle () {$ this-> call ('migrate', ['--force' => 'force',]);
$ this-> call ('modul: köçür', ['modul' => 'Müştərilər',]);
/ ** --------------- çalışan toxum əkinçiləri ----------------- ** /
$ this-> call ('db: seed', ['--force' => 'force',]);
$ this-> call ('modul: toxum', ['module' => 'Müştərilər',]); }

Laravel-də modul tətbiqetmələrin yaradılması ilə bağlı öz təcrübəmə əsaslanaraq, modullara aid tətbiqetmələrin bu modul qovluğunda, görünüşlər, funksiyalar, modellər, köçlər, ara vasitələr, əkinçilər, poçtlar, xidmətlər, testlər kimi tətbiqetmələrdə olmasını tövsiyə edirəm. İşlər və s. Bu, istifadəsi üçün başqa bir tətbiqə asanlıqla qoşula bilər.

Bu, "Laraveldə Modüler Tətbiqlərin Qurulması: Hissələr 1 və 2" mövzusundakı məqalənin sonunu gətiririk. Bu iki hissənin məzmunu ilə öz modul tətbiqinizi asanlıqla qurmağı bacarmalısınız. Və bu məqalənin 3-cü hissəsinin yaradılmasına ehtiyac varsa, əhatə etmədiyimiz bəzi anlayışlar var. orta proqram, poçt, provayder və s. istifadəsi kimi

Zəhmət olmasa şərhlərinizi və ya yazılarınızı aşağıdakı şərhlər bölməsində qoymağınızı və başqalarının bu yazını tez bir zamanda tapmasını təmin etməyinizi unutmayın.

Oxuduğunuz üçün təşəkkür edirəm.