CodeIgniter

**CodeIgniter**, PHP ծրագրավորման լեզվով գրված բաց կոդով MVC ֆրեյմվորկ, որն նախատեսված է լիարժեք վեբ-համակարգերի և հավելվածների ստեղծման համար։ Մշակվել է EllisLab ընկերության, ինչպես նաև Ռիք Էլիսի (Rick Ellis) և Փոլ Բուրդիքի (Paul Burdick) կողմից։

## Պատմություն
Ֆրեյմվորկիի առաջին անգամ թողարկվել է 2006 թ․ փետրվարի 28-ին։ Սկսած 2011 թ․ հունվարի 28-ից, երբ թողարկվեց ֆրեյմվորկի 2.0 տարբերակը, CodeIgniter-ի մշակումն իրականացվում է երկու ճյուղով՝
# CodeIgniter Core — այս ճյուղը առավել մեծ ուշադրություն է դարձնում կայունության վրա, ինչի պատճառով դանդաղ է զարգանում։
# CodeIgniter Reactor — այս ճյուղը զարգացվում է համայնքի կողմից։ Այն զարգանում է ավելի արագ և պարունակում է ամենանոր հնարավորությունները։

## Առանձնահատկությունները
* CodeIgniter-ն աչքի է ընկնում իր պարզությամբ, որն պայմանավորված է մի շարք գործողններով՝
** Ծավալուն, հասկանալի շարադրված, կիրառելի օրինակներով փաստաթղթեր, ինչպես նաև մեծ համայնք և Wiki,
** Բազմաթիվ վիդեոդասեր, որոնք կարելի է գտնել ինչպես պաշտոնական, այնպես էլ այլ կայքերում,
** Ֆրեյմվորկն ազատություն է տալիս ծրագրավորողին՝ չսահմանելով որևէ կառուցվածքային սահմանումներ կամ կանոններ,
** Անհրաժեշտություն չկա սովորել օգտագործել հրամանի տողով կառավարվող կոդի գեներատորը,
* CodeIgniter-ն աշխատում է գործնականում բոլոր PHP 5.1 և ավելի տարբերակն ապահովող հոսթինգներում,
* CodeIgniter-ն համարվում է արագ և ոչ շատ ռեսուրսներ պահանջող ֆրեյմվորկներից մեկը,
* Փոքր ծավալը, (2.1.1 տարբերակն ամբողջությամբ զբաղեցնում է ընդամենը 2.2 ՄԲ ծավալ)
* Ֆրեյմվորկն թույլ է տալիս հրաժարվել մոդելներից (չնայած, որ դա չի ողջունվում)
* CodeIgniter-ի փաստաթղթերում ողջունվում են «մեծ» կառավարկիչները և «փոքր» մոդելները։ Վավերացումն ու արտաքին բիզնես-տրամաբանությունը հիմնականում կատարվում են կառավարչում։ Չնայած դրան, ֆրեյմվորկն ծրագրավորողին ազատություն է տալիս մշակման մեթոդն ընտրելու հարցում։

## Հնարավորությունները
* MySQL, PostgreSQL, MSSQL, SQLite, Օրաքլ տվյալների բազաների աջակցություն,
* Պսեվդո-ActiveRecord-ի աջակցություն, որն, մեծ մասամբ, կրկնում է SQL լեզվի շարահյուսությունը,
* Հեշտ ընդլայնվող համակարգ՝ արտաքին գրադարանների օգտագործման, ինչպես նաև արդեն գոյություն ունեցողների ընդլայման ու վերագրման հնարավորության շնորհիվ,
* Ինչպես սեգմենտավորված Մարդուն հասկանալի URL-ներ, այնպես էլ պարամետրերի փոխանցմամբ սովորական URL-ների աջակցություն,
* Ֆրեյմվորկն ունի բազմաթիվ ներկառուցված գրադարաններ, որոնք թույլ են տալիս աշխատել ֆայլերի, տվյալների բազաների, սեսիաների, պատկերների հետ, ուղարկել էլեկտրոնային նամակների, վավերացնել ֆորմաները և այլն,
* Ունի SQL-հարցումների և գեներացվող HTML-երի քեշավորման հնարավորություն։
* 2011 թվականին հայտնվեց Sparks անվանումով փաթեթների կառավարիչ, որն թույլ է տալիս հեշտությամբ տեղադրել արտաքին գրադարաններն հրամանի տողի օգնությամբ,
* HMVC կառուցվածքի աջակցություն (հավելվածների շնորհիվ)
* Չնայալ ստանդարտ փաթեթում ORM-ի բացակայությանը, ֆրեյմվորկի ելատեքստային կոդի փոքրիկ փոփոխությունից հետո հնարավոր է օգտագործել PHP ActiveRecord, Doctrine, Propel և այլ ORM-ներ

#### Ընտրել բոլորը աղյուսակից

```php
$this->db->get('table_name');
```


Համարժեք կոդը SQL-ում՝


```sql
SELECT * FROM `table_name`
```


#### JOIN և LIMIT օպերատորներով օրինակ

```php
public function getData($id = 0, $offset = 0, $limit = 30) {
  $result =  $this->db->select('table1.id, table2.name')
                      ->from('table1')
                      ->join('table2', 'table2.id=table1.id', 'left');
  if ($id) return $result->where('table1.id', (int)$id)->limit(1)->get()->row();
  return $result->limit($limit, $offset)->get()->result();
}
```


** Դեպք 1 (երբ $id = 0) **

Տվյալներ՝ $id = 0, $offset= 10, $limit = 30

Ելքի SQL-ը

```sql
SELECT table1.id, table2.name
FROM table1
LEFT JOIN table2 ON table2.id = table1.id
LIMIT 10, 30
```

Ֆունկցիան վերադարձնում է օբյեկտների զանգված (db->result())

** Դեպք 2 ($id-ն զրոյից տարբեր է) **

Տվյալներ՝ $id = 5, $offset = 0, $limit = 30

Ելքի SQL-ը

```sql
SELECT table1.id, table2.name
FROM table1
LEFT JOIN table2 ON table2.id = table1.id
WHERE table1.id = 5
LIMIT 1
```

Ֆունկցիան վերադարձնում է մեկ օբյեկտ (`db->row()`)

## Քննադատությունները
* Հաճախ CodeIgniter-ը քննադատում են օբյեկտային կողմորոշմամբ ծրագրավորման վերաբերյալ ոչ սովորական տեսակետի համար։
* CakePHP-ի որոշ կողմնակիցներ կարծում են, որ CodeIgniter-ի կողմից ծրագրավորողին տրված ազատությունը ինչ-որ տեղ խրախուսում է անփույթ ծրագրավորման ոճը։
* CodeIgniter-ի մոդելները լռելյան չեն աջակցում ORM-ը։
* Տվյալների բազաների հետ աշխատանքի դասը վատ մտածված կառուցվածքի պատճառով գործնականում հնարավոր չէ ընդլայնել կամ փոփոխել։
* Չնայած նրան, որ CodeIgniter-ն օգտագործվում է մեծ թվով մասնագիտացված ծրագրավորողների և վեբ-ստուդիաների կողմից, շատերը գտնոմ են, որ այն միայն նորեկների համար է։

## CodeIgniter-ի ազդեցությունը
CodeIgniter-ը հիմք է հանդիսացել այնպիսի ֆրեյմվորկների համար, ինչպիսիք են Kohana-ն և Rain Framework-ը, ինչպես նաև CodeIgniter-ի որոշ մտքեր օգտագործվում են Fuel PHP և CodeLighter ֆրեյմվորկներում։

Kohana-ն սկզբում ընդամենը CodeIgniter-ի մի ճյուղ էր։ Այն ստեղծվել էր PHP5-ի բոլոր հնարավորությունների օգտագործման և, մինչնույն ժամանակ, CodeIginter-ի բարձր արտադրողականության պահպանման նպատակով։ Այն տարբերվում էր CodeIgniter-ից նրանով, որ չէր աջակցում PHP4-ը և ուներ որոշ լրացուցիչ գրադարաններ (ORM, Auth և այլն)։ Եթե Kohana-ի 2.x տարբերակում դեռևս ինչ-որ բան մնացել էր CodeIgniter-ից, ապա նոր տարբերակներում (3.x) այն CodeIgniter-ի ոչ մի ընդհանուր բան չունի, բացի պատմությունից։

CodeIgniter-ով են աշխատում մի շարք CMS-ներ՝ Fuel CMS-ը, MaxSite CMS-ը, Cogear-ը, PyroCMS-ը և այլն։

## Հղումը
* codeigniter.com — Պաշտոնական կայքը
** Ֆորումը 
** Wiki-բաժինը 
* Sparks  — Sparks փաթեթների կառավարչի կայքը
* philsturgeon.co.uk  — Ֆիլ Սթարջենի (Phil Sturgeon)՝ ֆրեյմվորկի ակտիվ մշակողներից մեկի բլոգը

## CodeIgniter-ն օգտագործող նախագծեր
* tranquillpoet.com  — IDE, նախատեսված «պոետների» համար։ Ելատեքստը տեղադրված է GitHub-ում
* Maxsite CMS
* ImageCMS — ինտերնետ-խանութների և կայքերի համար նախատեսված CMS
* https://www.proprofsproject.com/ Project Bubble — նախագծերի կառավարման համակարգ]
* PyroCMS — ունիվերսալ մոդուլային CMS

## Տես նաև
* Kohana
* CMF-ների ցանկը
* Smarty

## Ծանոթագրություններ

Կատեգորիա:Apache Software License արտոնագրով ծրագրային ապահովում
Կատեգորիա:BSD արտոնագրով ծրագրային ապահովում
Կատեգորիա:Ծրագրերի ազատ գրադարաններ