1.5. Կցում ենք դասեր՝ տվյալների բազայի և շաբլոնների հետ աշխատանքի համար
Մենք ստեղծել ենք մեր ֆրեյմվորկի կառուցվածքը, այժմ ժամանակն է մտածել տվյալների՝ նորությունների, ապրանքների պահպանման մասին։ Տվյալների բազայի հետ աշխատող օբյեկտը պետք է կարողանա՝
- Կառավարել միացումը տվյալների բազայի հետ
- Տրամադրել փոքր աբստրակցիա՝ բազայից
- Քեշավորել հարցումները
- Պարզեցնել բազայի հետ ընդհանուր գործողությունները
Դրա համար մենք ստեղծում ենք օբյեկտ Registry/objects/db.class.php
:
Այս դասը կպարունակի բոլոր անհրաժեշտ մեթոդները՝ տվյալների բազայի հետ աշխատելու համար՝ միացում, հարցումներ, ավելացում, թարմացում, ջնջում, քեշավորում։
Մենք նաև ստեղծում ենք template.class.php
դասը՝ Registry/objects
պանակում՝ աշխատելու համար շաբլոնների հետ։ Այն տրամադրում է մեթոդներ՝
- Շաբլոնների միացում և բովանդակության տեղադրում
- Տոկենների փոխարինում՝ տվյալներով
- SQL քեշից և տվյալների քեշից փոխարինում
Երրորդ դասը, որը պետք է ավելացնենք՝ page.class.php
է՝ պահելու էջի վիճակը, բովանդակությունը, թեգերը, վերնագիրը և այլն։
Բոլոր դասերն ինտեգրվում են ֆրեյմվորկի registry.class.php
-ի միջոցով՝ օգտագործելով storeObject()
և getObject()
մեթոդները։
Մենք ստեղծեցինք նաև MySQL աղյուսակ՝ users
անունով, որում կան դաշտեր՝ id
, name
, email
։
Գլխավոր էջի շաբլոնը՝ Views/Templates/main.tpl.php
ֆայլում, պարունակում է տեգեր և տոքեններ՝ օգտագործելու համար էջում՝
<ul> <!-- START members --> <li>{name} {email}</li> <!-- END members --> </ul>
index.php ֆայլում մենք՝
- Սկսում ենք session-ը
- Նշում ենք APP_PATH և FW հաստատունները
- Լցնում ենք օբյեկտները՝ db, template
- Կապվում ենք տվյալների բազայի հետ
- Նախապատրաստում ենք շաբլոնը՝
main.tpl.php
- Կատարում ենք հարցում՝
SELECT * FROM users
- Ավելացնում ենք տվյալները
members
թեգում - Սահմանում ենք էջի վերնագիրը
- Պարունակում ենք բովանդակությունը և ցուցադրում ենք էջը
Արդյունքում ստանում ենք ցուցակ՝ օգտատերերի անուններով և էլ․հասցեներով։
Նշված են նաև ուղղումներ, որոնք կատարվել են սխալներից հետո՝ դասերի անունների վերանվանում, կանչի ուղիների ուղղում, սխալ անունով փոփոխականների շտկում։
Այս փուլով մենք ավարտեցինք տվյալների բազայի և շաբլոնների հետ աշխատող դասերի պատրաստումը և ինտեգրումը՝ մեր ֆրեյմվորկի հետ։
Այժմ, երբ մենք ունենք տվյալների բազայի և շաբլոնների կառավարման դասերը, պետք է դրանք միացնենք մեր ֆրեյմվորկին։
Սրա համար մենք ստեղծում ենք storeCoreObjects()
մեթոդը Registry/registry.class.php
ֆայլում՝ որտեղ միացնում ենք մեր հիմնական օբյեկտները՝ db
և template
:
public function storeCoreObjects() { $this->storeObject('db', 'db'); $this->storeObject('template', 'template'); }
Այս մեթոդը կկոչվի index.php
ֆայլից։ Այնուհետև մենք ստեղծում ենք users
աղյուսակը՝ օրինակային տվյալներով՝ 3 դաշտով՝ id
, name
, email
։
Ստեղծում ենք գլխավոր էջի շաբլոնը՝ Views/Templates/main.tpl.php
ֆայլում՝ հետևյալ բովանդակությամբ․
<html> <head> <title> Powered by PCA Framework</title> </head> <body> <h1>Our Members</h1> <p>Below is a list of our members:</p> <ul> <!-- START members --> <li>{name} {email}</li> <!-- END members --> </ul> </body> </html>
Այժմ index.php
ֆայլում, մենք ներմուծում ենք տվյալները և դրանք ավելացնում էջի մեջ՝ որպես թեգ։ Արդյունքում կստանանք ճիշտ ցուցադրված ցանկ՝ օգտատերերով։
Եթե սխալներ հայտնվեն՝ անհրաժեշտ է ստուգել դասերի անունները, ֆայլերի ուղիները և օգտագործվող մեթոդները։
Տրամադրվում են նաև փաթչեր՝ ուղղելու database
դասի անունը db
-ի, կարգավորելու շաբլոնի վերնագրի արտածումը, և ավելացնելու անհրաժեշտ controller ֆայլեր։
Այս փուլով մենք հասանք նրան, որ ունենք մոդուլներ՝ տվյալների բազայի և շաբլոնների կառավարման համար, որոնք օգտագործվում են index.php
-ում՝ էջի դինամիկ բովանդակություն ցուցադրելու համար։
Եթե ամեն ինչ անցավ հաջողությամբ և բազայում կան օգտատերեր, ապա դուք պետք է տեսնեք մոտավորապես հետևյալ արդյունքը․
Եթե ինչ–որ բան չաշխատեց կամ առաջացան սխալներ, հնարավոր է՝ ես նախորդ հոդվածներում դեռ չշտկած լինեմ կոդը։ Կարող եք դիտել աշխատանքային օրինակը GitHub-ում։
Ահա այն սխալները, որոնք առաջացան հոդվածը գրելու ընթացքում։
Փոխում ենք տվյալների բազայի կառավարման դասի անունը՝ Registry/objects/db.class.php ֆայլում․
Index: Registry/objects/db.class.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- Registry/objects/db.class.php (revision b1ffa3bbfce4e95ace7ed735e9412e9332e17d50) +++ Registry/objects/db.class.php (revision ) @@ -4,7 +4,7 @@ * Управление БД * Предоставляет небольшую абстракцию от БД */ -class database { +class db { /** * Позволяет множественное подключение к БД \ No newline at end of file
Սահմանում ենք ստատիկ մեթոդներ այնտեղ, որտեղ պետք է, և վերանվանում ենք database դասը՝ Registry/registry.class.php-ում․
Index: Registry/registry.class.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- Registry/registry.class.php (revision b1ffa3bbfce4e95ace7ed735e9412e9332e17d50) +++ Registry/registry.class.php (revision ) @@ -69,15 +69,15 @@ * @param String $key the key for the array * @return void */ - public function storeObject( $object, $key ) + public static function storeObject( $object, $key ) { - require_once('objects/' . $object . '.class.php'); + require_once('Registry/objects/' . $object . '.class.php'); self::$objects[ $key ] = new $object( self::$instance ); } public function storeCoreObjects() { - $this->storeObject('database', 'db' ); + $this->storeObject('db', 'db' ); $this->storeObject('template', 'template' ); } @@ -86,7 +86,7 @@ * @param String $key the array key * @return object */ - public function getObject( $key ) + public static function getObject( $key ) { if( is_object ( self::$objects[ $key ] ) ) { \ No newline at end of file
Պահանջվեց նաև ստեղծել db
controller ֆայլ՝
Controllers/db/
Controllers/db/db.php
Շտկեցինք սխալը շաբլոնների կառավարման դասում՝ Registry/objects/template.class.php-ում․
Index: Registry/objects/template.class.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- Registry/objects/template.class.php (revision b1ffa3bbfce4e95ace7ed735e9412e9332e17d50) +++ Registry/objects/template.class.php (revision ) @@ -194,7 +194,7 @@ public function parseTitle() { - $newContent = str_replace('<title>', '<title>'. $this->$page->getTitle(), $this->page->getContent() ); + $newContent = str_replace('<title>', '<title>'. $this->page->getTitle(), $this->page->getContent() ); $this->page->setContent( $newContent ); } \ No newline at end of file