CodeIgniter - vytvorenie a testovanie jednoduchej aplikácie

Tento malý a výkonný framework vychádza z PHP verzie 4.1 a
je plne funkčný aj na PHP 5, avšak nevyužíva žiadny z prínosov
tejto verzie. Verzia frameworku postavená na PHP 5 je už vo vývoji.
Prvá verzia tohto frameworku bola vydaná v roku 2006 a poslednú stabilnú verziu 1.7.2 vydala v roku 2009 spoločnosť EllisLab za podpory širokej internetovej komunity. Tento malý a výkonný framework vychádza z PHP verzie 4.1 a je plne funkčný aj na PHP 5, avšak nevyužíva žiadny z prínosov tejto verzie. Verzia frameworku postavená na PHP 5 je už vo vývoji. Silnou stránkou tohto projektu je veľmi prehľadne spracovaná dokumentácia, ktorá umožňuje rýchle oboznámenie sa s frameworkom, a vyčerpávajúce množstvo informácií. Tento framework po nainštalovaní obsahuje 26 rôznych knižníc a každá z nich reprezentuje jednu zo základných funkcií. Framework je vhodný na menšie a výkonnejšie webové aplikácie pri ktorých je jeho prednosťou rýchlosť.

Ako prvú je treba správne nakonfigurovať adresu URL, na ktorej sa daná aplikácia nachádza, a to v konfiguračnom súbore, ktorý sa nachádza v adresári system/appliction/config/config.php .
$config['base_url'] = "http://cakephp.getfreehosting.co.uk/";
Ďalším krokom je spojenie s databázou, ktoré sa nakonfiguruje v súbore umiestnenom v adresári system/appliction/config/database.php .
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "adresa servera";
$db['default']['username'] = "username";
$db['default']['password'] = "heslo";
$db['default']['database'] = "meno databazy";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
Pre správnu funkčnosť databázového pripojenia je nutné ešte poupraviť jeden súbor a to v adresári system/appliction/config/autoload.php, ktorý nám pri spustení načíta nevyhnutnú knižnicu database.
$autoload['libraries'] = array('database');
Aby táto aplikácia pracovala, tak ako má, je nutné ešte nastaviť nové presmerovanie, ktoré sa uskutoční pri prvej návšteve stránky. Súbor routes.php obsahuj adresár system/application/config/ a v tomto súbore treba upraviť presmerovanie na chcený controller.
$route['default_controller'] = "members";
Teraz je aplikácia nakonfigurovaná a je potrebné vytvoriť súbory pre model, view, controller. Ako prvý sa vytvorí súbor membersmodel.php pre tabuľku members v adresári system/application/models/.
<?
class MembersModel extends Model {
var $table_record_count;
var $id; var $name;
var $street_number;
var $street;
var $town;
var $ZIP_code;
var $type;
var $login;
var $password;
function MembersModel() {
parent::Model();
$this->obj =& get_instance();
$this->_init_Members();
}
function add( $data ) {
// Load the database library $this->load->database();
// Build up the SQL query string
// $sql = $this->db->insert_string('members', $data);
$query = $this->db->query($sql);
return $this->db->insert_id();
}
function modify($keyvalue, $data) {
// Load the database library $this->load->database();
// Build up the SQL query string $where = "id = $keyvalue";
// $sql = $this->db->update_string('members', $data, $where);
$query = $this->db->query($sql);
}
}
?>
Ďalším krokom je vytvorenie súboru members.php v adresári system/application/controllers/, ktorý bude slúžiť na obsluhu všetkých požiadaviek užívateľov na informácie z tabuľky members. Pri výpise všetkých záznamov z tabuľky je použité stránkovanie, ktoré zobrazí len daný počet záznamov na jednu stránku a zvyšok rozdelí do ďalších strán.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Members extends Controller {
function Members() { parent::Controller(); }
function index() { $this->browse(); }
function browse() {
$start = $this->uri->segment(3,0);
$limit_per_page = 10;
$this->load->model('membersmodel');
// Instantiate the model
$the_results['members_list'] = $this->membersmodel->findAll($start, $limit_per_page);
// Send the retrievelist msg
$this->load->library('pagination');
$this->load->helper('url');
$config['base_url'] = site_url('members/showall/');
// or just /members/
$config['total_rows'] = $this->membersmodel->table_record_count;
$config['per_page'] = $limit_per_page;
$this->pagination->initialize($config);
$the_results['page_links'] = $this->pagination->create_links();
$this->load->library('layout');
$this->layout->render_page('/members/membersgrid', $the_results);
}
$this->load->helper('url');
$submit = $this->input->post('Submit');
if ( $submit != false ) {
$this->load->model('membersmodel');
$data = $this->_get_form_values();
$this->membersmodel->add($data);
redirect('/members/', 'location');
} else {
$data = $this->_clear_form();
$data['action'] = 'add';
$this->load->library('layout');
$this->layout->render_page('/members/membersdetails', $data);
}
}
...
Do tretice je ešte potrebné napísať kód aj pre súbor membersdetails.php, ktorý sa nachádza v adresári systems/application/views/members/... a má na starosti formátovanie výstupných informácií.
<?
$this->load->helper('url');
$action_url = site_url() . "/members/$action/";
?>
<h2>Enter members Details</h2>
<form name="membersdetails" id="membersdetails" method="POST" action="<?= $action_url; ?>">
<input type='hidden' name='id' id='id' value='<?= $id; ?>' >
<table cellspacing="2" cellpadding="2" border="0" width="100%">
<tr valign='top' height='20'>
<td align='right'>
<b> id: </b> </td>
<td> <?= $id; ?> </td>
</tr>
<tr valign='top' height='20'>
<td align='right'>
<b> name: </b> </td>
<td> <input type='text' name='name' id='name' value='<?= $name; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'>
<b> street_number: </b>
</td>
<td> <input type='text' name='street_number' id='street_number' value='<?= $street_number; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> street: </b> </td>
<td> <input type='text' name='street' id='street' value='<?= $street; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> town: </b> </td>
<td> <input type='text' name='town' id='town' value='<?= $town; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> ZIP_code: </b> </td>
<td> <input type='text' name='ZIP_code' id='ZIP_code' value='<?= $ZIP_code; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> type: </b> </td>
<td> <input type='text' name='type' id='type' value='<?= $type; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> login: </b> </td>
<td> <input type='text' name='login' id='login' value='<?= $login; ?>' />
</td>
</tr>
<tr valign='top' height='20'>
<td align='right'> <b> password: </b> </td>
<td> <input type='password' name='password' id='password' value='<?= $password; ?>' />
</td>
</tr>
</table>
<input type="submit" name="Submit" value="Save">
<input type="reset" name="resetForm" value="Clear Form">
</form>
Podobné súbory je potrebné vytvoriť aj pre tabuľku users. Adresa umiestnenia tejto aplikácie bude rovnaká, ako pri prvom frameworku a aj databáza sa použije z minulého testovania. Je tak možné zopakovať predchádzajúce testy a podmienky, ako pri prvom frameworku.
Výsledky z testovania frameworku CodeIgniter pomocou aplikácie PHP_Depend sú prehľadne zobrazené v nasledujúcich obrázkoch.


Po overení funkčnosti aplikácie umiestnenej na serveri môže začať testovanie pomocou Jmeter, ktorého nastavenia je možné použiť z predchádzajúceho testovania. Jediná vec, ktorú treba upraviť, je niekoľko vstupných údajov, ktoré sa ukladajú do tabuľky, aby bolo jasne vidieť fungovanie testovania.
| Udalosť | Vzorky | Priemer [ms] | Stredná hodnota [ms] | Min [ms] | Max [ms] | Priepustnosť |
|---|---|---|---|---|---|---|
| Test č. 1 | ||||||
| AddUser | 10 | 2174 | 2181 | 1147 | 2998 | 27,4/min |
| Users | 10 | 1932 | 1976 | 437 | 3114 | 30,8/min |
| Members | 10 | 759 | 334 | 203 | 2651 | 1,3/sec |
| EditUser | 10 | 799 | 345 | 210 | 2684 | 1,2/sec |
| Celkovo | 40 | 1416 | 1566 | 203 | 3114 | 42,0/min |
| Test č. 2 | ||||||
| AddUser | 10 | 2450 | 2546 | 1315 | 3440 | 26,1/min |
| Users | 10 | 1799 | 1966 | 505 | 3100 | 34,2/min |
| Members | 10 | 1188 | 1625 | 204 | 2666 | 1,3/sec |
| EditUser | 10 | 829 | 3341 | 332 | 2649 | 27,8/min |
| Celkovo | 40 | 1566 | 1778 | 204 | 3440 | 34,3/min |
| Test č. 3 | ||||||
| AddUser | 10 | 3981 | 4981 | 1354 | 5635 | 15,0/min |
| Users | 10 | 2341 | 2584 | 504 | 2995 | 25,4/min |
| Members | 10 | 1544 | 1969 | 329 | 3005 | 38,6/min |
| EditUser | 10 | 1805 | 1967 | 330 | 3158 | 33,1/min |
| Celkovo | 40 | 2418 | 2335 | 329 | 5635 | 24,7/min |













