Kohana Framework: wstęp do programowania

Kohana jest chyba jednym z kilku mniejszych frameworków PHP, które każdy powinien poznać. Dzięki swej prostocie świetnie nadaje się jako podstawy do nauki zaawansowanego programowania obiektowego z użyciem wzorca MVC. Dzisiaj napiszemy bardzo prosty system CMS oparty o bazę danych MySQL z użyciem PHP 5.4 oraz zestawu wizualnego Twitter Bootstrap w najnowszej odsłonie.

Jest wiele wrogów tego frameworka, jedni zarzucają brak przestrzeni nazw, inni wytykają słabą wydajność Kohany lecz tak naprawdę jest świetną podstawą do zrozumienia wzorca MVC oraz stawiania pierwszych kroków w PHP. Dzięki brakom i ograniczeniom jest zwinna i łatwa do zrozumienia.

Pozwolę sobie pominąć początek zabawy oraz wstępu do OOP gdyż chcąc programować teorię powinniśmy już mieć opanowaną. Czas na praktykę!

Skąd pobrać Kohana Framework

Najprościej jest udać się na oficjalną stronę Internetową projektu i kliknąć przycisk „Download” bezpośrednio z prawej strony naszego ekranu. W ten sposób pobierzemy najnowsze, stabilne wydanie Kohana Framework bezpośrednio z repozytorium Github.

Instalacja Frameworka w katalogu publicznym

Przystepując do tego kroku powinniście mieć już zainstalowany serwer HTTP, interpreter PHP5 oraz serwer baz danych MySQL. Obstawiam, że to już macie za sobą i przygotowaliście katalog publiczny dla projektu, do którego jest dostęp przez przeglądarkę pod adresem http://localhost/.

Jeśli tak to cała instalacja sprowadza się do wypakowania pobranego wcześniej archiwum następnie skopiowania całej zawartości folderu kohana i wklejenie go do naszego przygotowanego folderu publicznego. W moim przypadku jest to /var/www.

Wchodzimy teraz na lokalny adres naszego projektu http://localhost/ i jeśli naszym oczom ukazał się pomyślny test instalacyjny jak na poniższym obrazku to znaczy, że poprawnie umieściliśmy nasz framework w katalogu roboczym.

Pierwsze kroki

Pierwszą czynnością, którą zawsze robię jest uporządkowanie sobie katalogu roboczego oraz usunięcie niepotrzebnych nam plików. Dla poniższego artykułu pozwoliłem sobie usunąć wszystko poza głównymi plikami frameworka pozostawiając ostatecznie 3 katalogi oraz 2 pliki:

  • /application/
  • /modules/
  • /system/
  • example.htaccess
  • index.php

Następnym krokiem jest zmiana nazwy pliku example.htaccess na .htaccess (w tym pliku trzymane są reguły modułu rewrite oraz zmienne środowiskowe, które posłużą nam do operowania aplikacją).

Jeśli już zrobiliśmy powyższe kroki uporządkujmy teraz katalogi frameworka wrzucając je wszystkie do folderu app co pozwoli nam lepiej zadbać o ład i porządek w naszej aplikacji. Tak więc tworzymy w głównym katalogu aplikacji (tam gdzie jest index.php) katalog app, następnie przerzucamy do niego 3 foldery: application, modules, system.

Zmiana struktury domyślnej katalogów frameworka wiąże się z edycją ścieżek dostępu do tych katalogów. W tym celu otwieramy plik index.php a następnie nadpisujemy go poniższą zawartością:

Zmiany, które zostały wprowadzone to aktualizacja ścieżek do katalogów application, modules oraz system dodając zmienną $app z aktualną ścieżką. W przyszłości jeśli chcielibyśmy wyrzucić framework poza katalog publiczny (wyżej niż index.php) wystarczy dodać na początku wartości zmiennej $app prefiks katalogu wyżej czyli „../”.

Po tak przeprowadzonym porządku powinniśmy ujrzeć na ekranie triumfujący napis „Hello, world!”. Oznacza to, ze przeprowadziliśmy wszystkie kroki prawidłowo.

Konfiguracja aplikacji

Podstawowa reorganizacja struktury za nami, czas na konfigurację naszej przyszłej aplikacji. W tym celu otwieramy plik /app/application/bootstrap.php w którym znajdują się wpisy konfiguracyjne dla wielu elementów aplikacji, tj. wyświetlanie błędów, routing, moduły oraz wiele więcej.

Na początku warto zdefiniować środowisko programistyczne (ang. programming environment) poprzez dodanie zmiennej środowiskowej na początku pliku .htaccess

Konfiguracja środowiska została zakończona, ponieważ w pliku bootstrap znajduje się już ustanowienie środowiska programistycznego na podstawie zmiennej środowiskowej z pliku .htaccess.

Idąc do przodu odnajdujemy linię:

i zmieniamy jej wartość dla naszej strefy czasowej:

Następnie odnajdujemy linię określającą sposób identyfikacji języka:

oraz zamieniamy ją na:

Teraz należy ustawić domyślny język naszej aplikacji, w tym celu odnajdujemy linię

i zamieniamy ją na

Konfiguracja lokalizacji, strefy czasowej oraz domyślnego języka za nami. Czas teraz przejść niżej do konfiguracji inicjatora frameworka.
Odnjdujemy blok kodu zaczynający się od Kohana::init(array( a następnie nadpisujemy go całego naszą konfiguracją:

W inicjatorze mamy kilka innych opcji do wyboru między innymi, kodowanie znaków, wyświetlanie błędów, cache, profilowanie etc.
My jednak pozostawimy konfigurację z domyślnymi wartościami, zmieniając tylko dwa parametry odpowiadające za zdefiniowanie głównej ścieżki projektu oraz plik indeksu. Domyślnie jest nim index.php, lecz my by uzyskać efekt „ładnych” linków wyłączyliśmy go unikając tym samym adresów w postaci /index.php/strony/o-mnie.

Moduły

Moduły są odrębnymi częściami frameworka służące do jego rozszerzenia. W pliku /app/application/bootstrap.php odnajdujemy blok kodu rozpoczynający się od

Jest to tablica inicjatora modułów zawierające spis wszystkich włączonych modułów, znajdujących się w katalogu /app/modules/.
Domyślnie jak widzimy wszystkie moduły są wyłączone.

W podstawowej wersji naszej aplikacji będziemy potrzebowali dokładnie trzech z nich.

Pierwszym z nich jest auth odpowiadający za autoryzację użytkownika, kolejnym database który udostępnia nam cały wachlarz możliwości związanych ze składowaniem danych oraz ostatni orm, który służy do relacyjnego mapowania obiektów na tabelę w bazie danych.

Routing

Na tym etapie musimy sobie założyć nasze cele odnośnie funkcjonalności aplikacji, którą będziemy pisali. Założeniem tego długiego wpisu będzie budowa aplikacji do samodzielnego zarządzania własną stroną Internetową. Wraz z kolejnymi odsłonami artykułów z serii Kohana będziemy rozbudowywać naszą aplikację o kolejne elementy. Lista funkcji do wykonania:

  • System zarządzania treścią CMS
  • Proste aktualności
  • Rejestracja i logowanie użytkownika (autoryzacja)
  • System wiadomości wewnętrznych
  • Własna galeria
  • Panel administratora

Zacznijmy więc od zdefiniowania routingu naszej aplikacji. Zaplanowałem, że chciałbym mieć bardzo ładne adresy url w postaci www.mojastrona.pl/oferta lub www.mojastrona.pl/oferta/renowacja-wnetrz w przypadku gdy dana strona posiada pod sobą kolejne podstrony – dzieci.

Dla aktualności będzie to standardowo: /aktualnosci/{ID}/{tytul-wpisu-w-postaci-slug} oraz /aktualnosci/kategoria/{nazwa}.
Dla autoryzacji użytkownika stworzymy kontroler o nazwie auth, a adresacja będzie następująca: /auth/logowanie oraz /auth/rejestracja.

Zdefiniujmy pierwszy element routingu dla podstron CMS w postaci catch-all, czyli wszystkie żądania przekaż do kontrolera CMS oraz akcji index.

 

Stwórzmy następnie kontroler o nazwie Cms.php w katalogu /app/application/classes/Controller/Cms.php

Od teraz, wszystko co zostanie wpisane w adresie zostanie wyświetlone na ekranie:

Pokaże to Wam zasadę działania routingu.

Stwórzmy teraz strukturę bazy dla naszych stron

Nastał czas, w którym musimy zdecydować czy będziemy używać QueryBuildera i każdą akcję modelu będziemy pisać ręcznie składając zapytania czy pójdziemy o krok na przód i stworzymy Model dziedziczący po module ORM (relacyjne mapowanie obiektów).

Dla naszej aplikacji lepszym rozwiązaniem będzie wybór ORM, dlatego stwórzmy model Page.php w katalogu /app/application/classes/Model/Page.php

W modelu utworzyliśmy od razu funkcję generującą slug czyli adres strony na podstawie jej tytułu. Posłuży on nam również do identyfikacji parametrów routingu w poszukiwaniu pasującego elementu bazy danych.

Podsumowanie

Podsumowując ten wpis, utworzyliśmy podstawę do pracy nad naszą aplikacją do zarządzania treścią strony. W kolejnym artykule zajmiemy się podpięciem podstawowego layoutu strony, systemem szablonów oraz stworzymy pierwsze strony (podstrony).

Zapraszam do śledzenia mnie na Google+ oraz Twitterze.
Źródła naszej aplikacji z tutoriala znaleźć można w serwisie GitHub kliknij aby zobaczyć

Programista, administrator - miłośnik nowych technologii. Jak każdy fachowiec w branży nie oprę się porannej kawie w towarzystwie świeżej prasy. Hobbystycznie fotografuję, psuję, naprawiam, lutuję. Czego nie lubię? Nieskromnych ludzi i brzydkiego kodu.

  • Pingback: Kohana Framework: Layouty, widoki, szablony | webMASTAH()

  • Toja

    Przydał by się jakiś dobry kurs video frameworka Yii po polsku. Niestety brak takiego na rynku, a ostatnio zdobywa popularność.

    • nrm

      Ciężko znaleźć kogoś od Yii. Gdyby się znalazł to zapraszamy na nasze „łamy”. Za to będzie sporo o Laravelu, który ostatnio chyba jest bardziej popularny 😉

    • spawnm

      Bawiłem się Yii i śmiem twierdzić że póki nie wyjdzie w wersji 2.0 to o popularności nie ma co mówić.

  • Rafał

    Jakby ktoś miał problem z „Kohana_Exception [ 0 ]: A valid cookie salt is required. Please set Cookie::$salt.”
    Otworzyć bootstrap.php i dodać tam:
    Cookie::$salt = ‚Twoja-Sol’;

  • Rafał

    A kiedy będzie kolejny tutorial?

    • sbl

      W tym tygodniu możemy spodziewać się kolejnego wpisu.

  • Rafał

    Literówka
    „Dla naszej aplikacji lepszym rozwiązaniem będzie wybór ORM, dlatego stwórzmy model Pages.php w katalogu /app/application/classes/Model/Page.php”

    Najpierw podajesz Pages.php a później Page.php

    • sbl

      Słuszna uwaga, poprawione 😉

  • spunky86

    Chyba wkradł się błąd w nazwie akcji w routingu albo już w kontrolerze. Routing przekierowuje na ‚read’ a w kontrolerze jest ‚index’.

    • sbl

      To nie jest błąd, tak naprawdę to z routingu możemy usunąć całkowicie wpis ‚default’ bo ‚catchall’ wyłapie wszystko i request nigdy nie dotrze do ‚default’. Możemy też usunąć akcję index kontrolera Cms.

      Jeśli chcemy dodać coś niestandardowego w serwisie poza stronami, czyli np, routing wskazujący na osobny kontroller, przykładowo odpowiedzialny za formularz kontaktowy to musimy umieścić wpis routingu przed ‚catchall’.

      • spunky

        Tylko, że ‚catchall’ wywołuje akcję ‚read’ a w kontrolerze takiej akcji nie ma 😉

        class Controller_Cms extends Controller {

        public function action_index()
        {
        $param = $this->request->param(‚uri’);
        $this->response->body($param);
        }

        }

        • sbl

          A no ja patrzyłem na Githuba 🙂
          Fakt, tutaj jest pomyłka.

  • Tomilijones

    Jak Rafale rozwiązać ten problem?
    Jest jakiś przełącznik w php.ini do rozpoznawania/ignorowania dużych/małych znaków?

    $eventy = ORM::factory(‚Event’);
    var_dump($eventy);

    mi nic nie wyświetla. i nie krzyczy błędami.

    php 5.4.4 i kohana 3.3.1

    • Rafał Nowak

      Nie mam pojęcia, raczej to kwestia zastosowanego systemu plików, chociaż może sama Kohana coś tam ma w autoloaderze.
      A jak nazywa się Twoja klasa i jaka jest do niej ścieżka?

  • rel

    Wrzuciłem na serwer, install.php daje zielone światło, niczego poza zmianą nazwy .htacces nie zmieniałem, wywałuje adres: http://rafales.linuxpl.info/kohana/ i co? Zobaczcie sami, coś nie tak. Gdzie mam problem?

    • nrm

      wywal to z katalogu.

  • Witam,
    Poszukuję programisty PHP ze znajomością frameworku Kohana. Miejsce pracy: Warszawa. Zapraszam do kontaktu: 533 339 756.

    Pozdrawiam,
    Krystian Sikors

  • Paweł

    Witam,

    również poszukuje programisty PHP znającego Kohanę. Miejsce pracy: Warszawa lub zdalnie. Proszę o kontakt na telefon: 22 7738775

    Pozdrawiam
    Paweł Małecki

  • Adverts.pl

    Witam

    Ciekawy artykuł dotyczący frameworka jednak liczyłem na więcej 🙁 no cóż trzeba się doszkolić, …

    Czytałem go ponieważ zastanawiam się czy pisać ręcznie od zera czy jednak wykorzystać jakiś framework do pisania prostego portalu społecznościowego,

    a tak na marginesie to szukam pracownika mam przeznaczone 48.000 zł na portal ale praca lokalnie w firmie w Łowiczu (centrum polski), kontakt 794-631-210 Agencja reklamy Adverts.pl

    • zybi88

      takie społecznościowe to ja od 1000zł robie

      • anonim

        to współczuję, a mógłbyś zarobić 48k…
        za 1k to ja mogę zrobić najwyżej stronkę informacyjną, bez bazy danych, inaczej nie chce mi się z łóżka wstawać 😉 obstawiam, żeś student

  • Sebek

    Link do GitHub’a jest nieaktualny.

    • nrm

      Kohana jest w ogóle nieaktualna :/

  • Mam takie pytaneczko – może nizwiązane z tematem, ale w temacie kohana jest bardzo mało artykułów. Otóż….Jak wyexportować treści z „Kohana” do xml ?

  • przemisia

    Czy ktoś w ogóle próbował coś zrobić od samego początku według tego opisu? Przecież nic nie działa!! Opisy kodów php są niepełne

  • Piotr

    Robię wszystko jak trzeba i Mi to się pojawiło –>
    ErrorException [ 8 ]: Array to string conversion ~ SYSPATH/classes/Kohana/Log/Writer.php [ 81 ]zamiasta ‚hello world’ co zrobić, aby było dobrze ??

  • Jak dodać opcję sprawdzania pisowni w edytorze?

  • Piotr

    Po dokonaniu zamiany index.php i przeniesieniu struktury do katalogu app wyświetla mi się komunikat ErrorException [ 8 ]: Array to string conversion ~ SYSPATH/classes/Kohana/Log/Writer.php [ 81 ]. Przepraszam może pytanie banalne, jednak całkowicie zaczynam, dziękuję za pomoc

Send this to a friend

webmastah.weekly
Cotygodniowa porcja linków ze świata WEBDEV BEZ spamu, TYLKO samo mięcho!
Zobacz poprzednie wydania. Dołącz do 2 tysięcy webdeveloperów!
HTML5, CSS3, JS (React, Angular, Ember, Vue), PHP, SQL