<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nasza Kohana &#187; struktura</title>
	<atom:link href="http://nasza.kohanaphp.pl/tag/struktura/feed/" rel="self" type="application/rss+xml" />
	<link>http://nasza.kohanaphp.pl</link>
	<description></description>
	<lastBuildDate>Sat, 02 Jan 2010 16:27:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Struktura i nazewnictwo</title>
		<link>http://nasza.kohanaphp.pl/struktura-kohany/</link>
		<comments>http://nasza.kohanaphp.pl/struktura-kohany/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:51:04 +0000</pubDate>
		<dc:creator>Zepco</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[struktura]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=36</guid>
		<description><![CDATA[Struktura katalogów
Zanim przejdziemy do utworzenia pierwszego kontrolera, zapoznaj się ze strukturą katalogów i elementami jakie posiada Kohana.

Całość dzieli się na 3 katalogi:


		system &#8211; tu znajduje się „serce” naszego frameworka, w tym główny rdzeń (core) oraz inne elementy, których krótki opis znajduje się poniżej;
	

		modules &#8211; zawiera kod (biblioteki, modele, widoki itp.), który jest na tyle uniwersalny, [...]]]></description>
			<content:encoded><![CDATA[<h3>Struktura katalogów</h3>
<p>Zanim przejdziemy do utworzenia pierwszego kontrolera, zapoznaj się ze strukturą katalogów i elementami jakie posiada Kohana.</p>
<p><span id="more-36"></span></p>
<p>Całość dzieli się na 3 katalogi:</p>
<ul>
<li>
		<strong>system</strong> &#8211; tu znajduje się „serce” naszego frameworka, w tym główny rdzeń (core) oraz inne elementy, których krótki opis znajduje się poniżej;
	</li>
<li>
		<strong>modules</strong> &#8211; zawiera kod (biblioteki, modele, widoki itp.), który jest na tyle uniwersalny, że może być wykorzystywany w innych projektach (np. obsługa użytkowników);
	</li>
<li>
		<strong>application</strong> – ten katalog będzie nas interesował najbardziej. To w nim przechowywane są wszystkie pliki związane z naszą aplikacją.
	</li>
</ul>
<div class="illustration">
	<img class="size-full wp-image-87" title="Rys. 2.1. Struktura katalogów" src="http://nasza.kohanaphp.pl/wp-content/uploads/2008/12/kohana_structure.png" alt="Rys. 2.1. Struktura katalogów" width="380" height="760" />
</div>
<p>Nasze skrypty uruchamiane są poprzez plik index.php. To on ładuje podstawowe klasy Kohany, które później decydują który z elementów naszej aplikacji ma być obsłużony.</p>
<h3>Elementy Kohany</h3>
<p>Jak zapewne zauważyłeś, we wszystkich 3 katalogach jest podobna struktura podkatalogów:</p>
<ul>
<li>
		<strong>config</strong> – jak sama nazwa wskazuje zawiera pliki z 	konfiguracją aplikacji, bibliotek czy też poszczególnych modułów. Więcej informacji na temat konfiguracji znajdziesz w następnym artykule;
	</li>
<li>
		<strong>helpers</strong> – zawiera klasy podobne do bibliotek (libraries) z tym wyjątkiem, że posiadają metody statyczne, przez 	co nie potrzebna jest instancja klasy, żeby użyć którejś z jej funkcji;
	</li>
<li>
		<strong>hooks</strong> – czasem istnieje potrzeba uruchomienia kawałka kodu poza ramami działania kontrolera (np. przed jego wywołaniem lub w momencie wysłania nagłówków). Do tego właśnie służą &#8220;haki&#8221;;
	</li>
<li>
		<strong>i18n</strong> (skrót od internationalization) – katalog ten zawiera pliki językowe z komunikatami i tekstami, które chcemy aby były 	przetłumaczone na naszej stronie. Poza zdefiniowanymi standardowo można utworzyć własne;
	</li>
<li>
		<strong>libraries</strong> – katalog z naszymi bibliotekami wykorzystywanymi w aplikacji;
	</li>
<li>
		<strong>vendor</strong> – znalazłeś w internecie jakąś bibliotekę, której chciałbyś użyć w Kohanie? To miejsce jest właśnie dla niej. W tym katalogu przechowywane są klasy zewnętrznych bibliotek, zaadoptowane do współpracy z naszym frameworkiem;
	</li>
<li>
		<strong>controllers</strong>, <strong>models</strong>, <strong>views </strong> – elementy te pokrótce były opisane wcześniej, więc nie ma sensu się nad 	nimi rozwodzić. W następnych wpisach zajmiemy się dokładniej ich 	tworzeniem i zastosowaniem w aplikacji.
	</li>
</ul>
<h3>Kaskadowy system plików</h3>
<p>Charakterystyczną rzeczą, wartą uwagi w Kohanie jest kaskadowy system plików. Takie rozwiązanie pozwala na nadpisanie plików bez konieczności ich modyfikacji czy usuwania.  Jeśli chcemy otworzyć jakiś plik będzie on przeszukiwany w katalogach w kolejności <code>application -&gt; modules -&gt; system</code>. Jeśli plik nie znajdzie się w żadnym z nich, to zostanie wyświetlony komunikat błędu (w przypadku braku kontrolera błąd 404). Podkatalogi w modules są przeglądane w kolejności ich dodania w pliku konfiguracyjnym config.php (o konfiguracji powiemy w <a href="http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/">następnym artykule</a>). Spójrz na poniższy rysunek.</p>
<div class="illustration">
	<img class="size-full wp-image-77" title="Rys. 2.2. Kaskadowy system plików (autor Geert De Deckere)" src="http://nasza.kohanaphp.pl/wp-content/uploads/2008/12/kohana_modules.png" alt="Rys. 2.2. Kaskadowy system plików (autor Geert De Deckere)" width="520" height="600" />
</div>
<p>W katalogu <code>system/views</code> mamy widok <code>layout.php</code>, który posiada szkielet strony. Ale my chcemy mieć własny szkielet z własnym wyglądem. Dlatego też tworzymy plik o tej samej nazwie w katalogu naszej aplikacji (<code>application/views</code>). Dzięki temu Kohana otrzymując polecenie odnalezienia widoku, szuka go najpierw w naszym katalogu. W tym przypadku znalazł go od razu, więc pomija pozostałe lokalizacje. Dla widoku <code>products.php</code>, który znajduje się aż w trzech miejscach (module a, module b oraz system), wygrywa katalog module a, ponieważ był najwyżej w hierarchi.</p>
<p>Rozwiązanie to jest bardzo użyteczne w przypadku konfiguracji. W zasadzie nie powinieneś nic zmieniać w katalogu system, ponieważ w przypadku aktualizacji Kohany stracisz wszystkie zmiany, a po pewnym czasie raczej nie będziesz pamiętać co i gdzie zmieniłeś.  Zatem jeśli brakuje jakiegoś pliku, który istnieje w katalogu system/config, bądź w którymś z modułów, a który chcesz zmodyfikować, to skopiuj go do application/config i tam dopiero modyfikuj.</p>
<h3>Standardy nazewnictwa</h3>
<p>Aby Kohana wiedziała gdzie znaleźć elementy naszej aplikacji musimy zachować pewne standardy.</p>
<ul>
<li>
		<strong>Kontrolery (controllers)</strong>:</p>
<ul>
<li>nazwa pliku musi być zapisana małymi literami, np. artykuly.php;</li>
<li>nazwa kontrolera musi się pokrywać z nazwą pliku , dodatkowo kończy się sufiksem _Controller (np. Artykuly_Controller). Pierwsze litery wyrazów są duże, pozostałe małe;</li>
<li>musi dziedziczyć po klasie Controller bądź jednym z jego potomków;</li>
<li>standardowo wywoływana jest funkcja index (jeśli nie podano inaczej).</li>
</ul>
</li>
<li>
		<strong>Pomocniki (helpers)</strong>:</p>
<ul>
<li>nazwę pliku i klasy zapisujemy małymi literami.  Nazwa pliku pokrywa się z nazwą klasy (z wyjątkiem sufiksu _Core);</li>
<li>do nazw nowych klas dodajemy sufiks _Core, np. html_Core, tak aby w przyszłości możliwe było rozszerzenie funkcjonalności klasy.</li>
</ul>
</li>
<li>
		<strong>Biblioteki (libraries)</strong>:</p>
<ul>
<li>nazwa pliku podobnie jak w przypadku pomocników pokrywa się z nazwą klasy (z wyjątkiem sufiksu _Core), ale musi zachować takie same wielkości liter jak nazwa klasy;</li>
<li>nazwa klasy zaczyna się od wielkiej litery, wielkość pozostałych liter zależy od programisty;</li>
<li>w przypadku nowych klas postępujemy analogicznie jak w pomocnikach.</li>
</ul>
</li>
<li>
		<strong>Modele (models)</strong>:</p>
<ul>
<li>nazwy plików składają się z małych liter i mają taką samą nazwę jak klasa (bez sufiksu _Model);</li>
<li>nazwa modelu musi się pokrywać z nazwą pliku, dodatkowo kończy się sufiksem _Model (np. User_Model). Pierwsze litery wyrazów są duże, pozostałe małe;</li>
<li>nazwa modelu powinna być zapisana w liczbie pojedynczej (ważne w przypadku angielskich nazw i użycia ORM).</li>
</ul>
</li>
<li>
		<strong>Widoki (views)</strong>:</p>
<ul>
<li>nazwy plików w tym przypadku mogą być dowolne, wielkość liter nie ma znaczenia, byleby przy wywołaniu widoku ją zachować. Musi być jedynie zakończona rozszerzeniem .php.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/struktura-kohany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
