Kohana

Kohana jest to framework napisany w języku programowania PHP, wykorzystujący wzorzec MVC. Jest to framework, który na pewno charakteryzujący się prostotą co za tym idzie – świetnie nadaje się do nauki podstaw bardziej zaawansowanego programowania obiektowego. Według statystyk zaprezentowanych przez serwis www.sitepoint.pl, niestety nie odnosi wielkich sukcesów pod wzglęem popularności gdyż znajduje się aż na 19 miejscu.

Framework charakteryzuje się dużą wydajnością ale także wygodą użytkowania. Jest to nrzędzie szybkie i proste w zrozumieniu oraz budowie. Nowe wersje Kohany opierają się o wzorzec HMVC, który sprawia, że tworzenie złożonych aplikacji jest znacznie wygodniejsze i bardziej ustandaryzowane. HMVC (Hierarchical model–view–controller) to ewolucja wzorca MVC. Rozszerzenie to dodatkowo pozwala na tworzenie kolejnych zapytań i jednocesne realizowanie zadań.

Każdy programista, który chce sprawnie posługiwać się tym narzędziem, musi koniecznie zapoznać się ze strukturą katalogów tego frameworka. Struktura katalogów dzieli się na poniższe elementy:

  • modules (folder w którym przechowywane są dostępne moduły rozszerzające funkcjonalność frameworka, moduły te mogą być zarówno włączane jak i wyłączane za pomocą modyfikacji funkcji Kochana::modules, która jest dostępna w pliku bootstrap.php)
  • appliction (w tym miejscu przechowywane są pliki związane z naszą aplikacją, najważniejszym plikiem w obszarze tego katalogu jest plik bootstrap.php, który odpowiada za przygotowanie a także inicjację naszej aplikacji)
  • system (w obszarze tego katalogu są przechowywane najważniejsze klasy frameworka, które stanowią jego podstawę)
  • vendor (jest to zazwyczaj opcjonalny katalog, w obszarze którego przechowywane są dodatkowe biblioteki, które nie wchodzą w skład Kohany).

Framework Kohana to również bardzo elastyczny szkielet programistyczny. Pozwala na rozszerzanie jej możliwości za pośrednictwem dodatkowych modułów. Dostępne są między innymi takie moduły jak:

  • auth (moduł odpowiedzialny za uwierzytelnianie do systemu)
  • cache (moduł zajmujący się obsługą pamięci podręcznej)
  • database (moduł służący do interakcji z bazami danych, budowania i przygotowywania zapytań)
  • orm (moduł orm Kohany)
  • userguide (moduł stanowi podręcznik użytkownika oraz dokumentację na żywo pobieraną przez API).

Przykładowy kod w Kohana

Kohana Przykład #1

  <?php
  defined('SYSPATH') OR die('No direct access allowed.');
   
  class Model_Member extends ORM {
   
      public function rules()
      {
          return array(
              'username' => array(
                  array('not_empty'),
                  array('min_length', array(':value', 4)),
                  array('max_length', array(':value', 32)),
                  array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
              ),
              'first_name' => array(
                  array('not_empty'),
                  array('min_length', array(':value', 4)),
                  array('max_length', array(':value', 32)),
                  array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
              ),
              'last_name' => array(
                  array('not_empty'),
                  array('min_length', array(':value', 4)),
                  array('max_length', array(':value', 32)),
                  array('regex', array(':value', '/^[-\pL\pN_.]++$/uD')),
              ),
              'email' => array(
                  array('not_empty'),
                  array('min_length', array(':value', 4)),
                  array('max_length', array(':value', 127)),
                  array('email'),
              ),
          );
      }
  }
  ?>
  
Kohana Przykład #2

  <?php
  public function action_create()
  {
      $view = View::factory('members/create')
          ->set('values', $_POST)
          ->bind('errors', $errors);
   
      if ($_POST)
      {
          $member = ORM::factory('member')->values($_POST, ['username', 'password']);
   
          $external_values = [
              'password' => Arr::get($_POST, 'password'),
          ] + Arr::get($_POST, '_external', []);
          $extra = Validation::factory($external_values)
              ->rule('password_confirm', 'matches', [':validation', ':field', 'password']);
   
          try
          {
              $member->save($extra);
  
              $this->request->redirect('members/'.$member->id);
          }
          catch (ORM_Validation_Exception $e)
          {
              $errors = $e->errors('models');
          }
      }
   
      $this->response->body($view);
  }
  ?>