Witam!
Udostepnilem w necie framework'a pod Coyote'a do potestowania dla chetnych. Oczywiscie bardzo wczesna wersja, wiec nawet nie wrzucam na CVS jeszcze bo za wczesnie:
http://boduch.net/coyote-f/framework.zip
Tutaj prosciutka dokumentacja:
Sorry, za taka mala ilosc komentarzy. Po prostu poki co skupialem sie na tym, aby to dzialalo ;)
Dla chetnych maly tutorial jak to wszystko dziala.
- Instalacja
========
Nie wymaga. Wystarczy rozpakowac. Zadna konfiguracja nie jest wymagana do dzialania.
Wystarczy wejsc, np. poprzez URL:
Powinna sie ukazac strona powitalna.
1.1) Wymagania
PHP 5
serwer HTTP
Ten framework jest niemal w calosci obiektowy, wiec pisany pod PHP 5.
Konkretnie u mnie to jest v. 5.2.
Budowa systemu
Generalnie opiera sie na architekturze MVC. Nie bede sie tutaj zaglebial w szczegoly i
dokladnie wyjasnial czym to jest. Powiem pokrotce:
Kontroler
Projektowanie aplikacji w oparciu o MVC polega na tworzeniu kontrolerow. One maja za zadanie
wykonac powierzone im zadanie ;) Tutaj znajduje sie logika aplikacji, dokonywanie niezbednych
operacji. Kontrolery pisane sa obiektowo, umieszcznae w katalogu /controller. Umiescmy tam,
dla przykladu plik foo.php, ktory bedzie wygladal tak:
<?php
class foo extends controller
{
function main()
{
echo 'Hello World!';
}
}
?>
Nazwa klasy musi byc taka sama jak nazwa pliku (kontrolera). Glowna metoda kontrolera, to main().
Czyli na poczatku zostanie wykonany kod tej metody. Mozesz teraz wejsc poprzez adres:
http://127.0.0.1/index.php/Foo
Wyswietli sie magiczny napis Hello World. W tym momencie framework odczytal nazwe naszego zadania (Foo)
i wykonal odpowiedni kontroler.
Framework jest tak skonstrulowany, iz, pierwszy parametr adresu stanowi nazwe kontrolera - drugi -
metode. Czyli rownie dobrze, mozemy wywolac:
http://127.0.0.1/index.php/Foo/Main
UWAGA! Zeby to dzialalo, nalezy skonfigurowac routing. W pliku config.php, odkomentuj ten kod:
/*
$route['*'] = array(
'url' => ':controller/:action',
'controller' => ':controller',
'action' => ':action',
'default' => array(
'action' => 'main'
)
);*/
Teraz, mozemy poprzez adres:
http://127.0.0.1/index.php/Foo/Bar
wywolac kontroler Foo (klasa Foo) i metode (akcje) Bar. Jezeli takowa nie istnieje, system
powinien wyswietlic komunikat 404.
Widoki
Dotychczas w Coyote uzywana byla klasa template. Nadal jest dostepna, ale ja zaczelem wprost, wplatac
w kod HTML, kod PHP. Widok to warstwa prezentacji. Powinna zawierac w naszym przypadku - kod XHTML,
ale moze rowniez - np. - RSS.
Widoki sa zapisywane w katalogu /template. Umiesc w katalogu, plik - np.: foo_view.php. Jego zawartosc
moze byc nastepujaca:
<html>
<head>
<title><?= $title; ?></title>
</head>
<body>
Czesc <?= $name; ?>
</body>
</html>
Powrocmy do widku, do metody main(). Zmodyfikuj kod:
function main()
{
$data = array(
'title' => 'Tytul jakis',
'name' => 'Adam'
);
$this->load->view('foo_view', $data);
}
Taki kod spowoduje wyswietlenie widoku foo_view i przekazanie do niego odpowiednich parametrow.
Proste? We frameworku znajduje sie rowniez klasa view (odsylam do dokumentacji). Mozemy zrobic tak:
$names = array('Jas', 'Stefan', 'Marek');
$this->view->assign('names', $names);
$this->view->append('names', 'Adam');
$this->load->view('index');
A w widoku:
<?php foreach ($names as $name): ?>
Hello <?= $name; ?><br />
<?php endforeach; ?>
Modele
Modele, czyli warstwa danych. Poki co - nie bede o tym pisal ;)
Biblioteki
W katalogu /lib projektu znajduja sie moduly, ktore rozszerzaja funkcje jadra. Mozna piasc wlasne
biblioteki. W plik autoload.php znajduje sie spis bibliotek, ktore sa dolaczne do programu na starcie.
Mamy np>
- acl.class.php - ACL (poki co prosta klasa)
- benchmark.class.php - wiadomo - pomiary
- cache.class.php - wiadomo
- config.class.php - odczyt konfigu (mozna rozszerzyc te klase)
- controller.class.php - podstawowe funkcje
- core.class.php - funkcje ladowania nowych modulow, helperow itp
- db.class.php - dostep do bazy danych
- error.class.php - obsluga bledow
- input.class.php - obsluga danych przychodzacych (_GET, _POST, _COOKIES, walidacje)
- lang.class.php - pomoc w tworzeniu aplikacji wielojezycznych
- output.class.php - output, tam rowniez metody sluzace do ustawiania np. plikow CSS w widokach
- router.class.php - analizowanie zadan
- template.class.php - biblioteka opcjonalna
- trigger.class.php - obsluga hookow
- validate.class.php - walidacja formularzy i innych danych
Nie wszystkie te biblioteki sa ladowane na starcie. Jezeli chcesz zaladowac dana biblioteke
w trakcie dzialania programu mozesz zrobic:
$this->load->library('biblioteka');
Helpery
Klasy lub funkcje ulatwiajace programowanie. W pliku autoload.php znajduje sie lista helperow
ladowana automatycznie. Np. taki helper url() tworzy URL. Mozna go uzyc (np. w widoku) w ten sposob:
<b>URL: <?= url('Foo/Bar'); ?></b> // wyswietli http://127.0.0.1/Foo/Bar
Inne polaczenie (wraz z funkcja html_a()):
<b>URL: <?= html_a(url('Foo/Bar'), 'Kliknij'); ?></b> // wyswietli: <a href="http://127.0.0.1/Foo/Bar">Kliknij</a>
Mozna tworzyc swoje helpery, umiescic w katalogu /helper i wywolac w trakcie dzialania programu:
$this->load->helper('moj_helper');
foo();
Ok, na razie wystarczajaco sie napisalem ;)
Dzieki za przeczytanie, w razie czego czekam na pytania.