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