<?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; kontroler</title>
	<atom:link href="http://nasza.kohanaphp.pl/tag/kontroler/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>Startujemy! Pierwszy kontroler</title>
		<link>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/</link>
		<comments>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 09:50:32 +0000</pubDate>
		<dc:creator>Insert</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[akcja]]></category>
		<category><![CDATA[kontroler]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=130</guid>
		<description><![CDATA[Po skonfigurowaniu aplikacji czas, żeby efekty naszej pracy w końcu zaczęły być widoczne. Czas na pierwszy kontroler!

Zaczynamy
Aby napisać swój pierwszy kontroler należy wejść do katalogu /application/controllers/. Tam, jak pisaliśmy już w rozdziale Struktura i nazewnictwo znajdują się wszystkie kontrolery naszej aplikacji.
Obecnie z pewnością widzisz 2 pliki, welcome.php oraz examples.php. Są to kontrolery predefiniowane przez zespół [...]]]></description>
			<content:encoded><![CDATA[<p>Po skonfigurowaniu aplikacji czas, żeby efekty naszej pracy w końcu zaczęły być widoczne. Czas na pierwszy kontroler!<br />
<span id="more-130"></span></p>
<h2>Zaczynamy</h2>
<p>Aby napisać swój pierwszy kontroler należy wejść do katalogu <code>/application/controllers/</code>. Tam, jak pisaliśmy już w rozdziale <a href="http://nasza.kohanaphp.pl/struktura-kohany/">Struktura i nazewnictwo</a> znajdują się wszystkie kontrolery naszej aplikacji.</p>
<p>Obecnie z pewnością widzisz 2 pliki, <a href="http://dev.kohanaphp.com/browser/trunk/application/controllers/welcome.php">welcome.php</a> oraz <a href="http://dev.kohanaphp.com/browser/trunk/application/controllers/examples.php">examples.php</a>. Są to kontrolery predefiniowane przez zespół rozwojowy Kohany po to, abyś mógł sam lepiej zrozumieć i rozeznać się w szkielecie aplikacji. Ten pierwszy służy do wyświetlenia strony startowej, którą widzisz bezpośrednio po zainstalowaniu Kohany (i usunięciu pliku <a href="http://dev.kohanaphp.com/browser/trunk/install.php">install.php</a> z głównego katalogu). Drugi zaś odpowiada za wyświetlenie strony z przykładami (jest ona dostępna pod adresem <a href="http://localhost/kohana/index.php/examples/">http://localhost/kohana/index.php/examples</a>, jeżeli instalowałeś Kohanę w nadrzędnej ścieżce swojego serwera HTTP, w podkatalogu /kohana). Oba te kontrolery nie będą nam potrzebne, ale warto je zachować na później (być może jakieś przykładowe rozwiązanie okaże się w przyszłości pomocne).</p>
<p><strong>Standardy tworzenia kontrolerów</strong></p>
<p>Z przytoczonego wcześniej rozdziału <a href="http://nasza.kohanaphp.pl/struktura-kohany/">Struktura i nazewnictwo</a> musisz zapamiętać, że:</p>
<ul>
<li>nazwa pliku musi być zapisana małymi literami, np. <code>artykuly.php</code>;</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>
<h2>Napiszmy coś wreszcie!</h2>
<p>Pierwszy kontroler będzie odpowiadał za wyświetlenie strony głównej naszego bloga. Jeżeli czytałeś rozdział <a href="http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/">Instalacja i konfiguracja</a> wiesz już, że istnieje taki plik konfiguracyjny jak <a href="http://dev.kohanaphp.com/browser/trunk/system/config/routes.php"><code>routes.php</code></a>, a w nim przechowywana jest linijka dotycząca kontrolera domyślnego (czyli nazwy kontrolera, który zostanie wywołany przy bezpośrednim otwarciu strony głównej naszej aplikacji w przeglądarce internetowej). Dla naszych potrzeb głównym kontrolerem, który będzie wczytywany domyślnie jako pierwszy będzie kontroler o nazwie home. Dlatego też należy dokonać zmiany wpisu, z postaci obecnej:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'welcome'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Do postaci:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'home'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Teraz, po odświeżeniu strony zobaczymy błąd. Jest on jednak w pełni uzasadniony &#8211; nie ma kontrolera o nazwie home, którego przy odświeżeniu witryny szukał przed chwilą skonfigurowany przez Ciebie router. Jeżeli go nie ma &#8211; stwórzmy go!</p>
<p><strong>Kontroler strony głównej &#8211; &#8220;home&#8221;</strong></p>
<p>Tworzymy zatem kontroler o nazwie pliku <code>home.php</code>, który ma poniższą zawartość:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SYSPATH'</span><span style="color: #009900;">&#41;</span> OR <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct access allowed.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Home_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem Kohany(m) kontrolerem! :)'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Odśwież teraz stronę&#8230; Tak &#8211; kontroler zadziałał. W Kohanie kontrolery mapowane są jak podstrony &#8211; dlatego ten sam kontroler zadziała, kiedy wpiszesz <a href="http://localhost/kohana/index.php/home">http://localhost/kohana/index.php/home</a>. Teraz nie musiałeś tego robić, ponieważ ustawiłeś router, który przy domyślnym wywołaniu (<code>$config['_default']</code> &#8211; patrz lekko powyżej) ma za zadanie wywołać kontroler home.</p>
<p><strong>Akcja kontrolera, jej sposób prezentacji i przyjmowanie parametrów</strong></p>
<p>Zmodyfikuj kontroler <code>home.php</code> do poniższej postaci:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SYSPATH'</span><span style="color: #009900;">&#41;</span> OR <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct access allowed.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Home_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem Kohany(m) kontrolerem! :)'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> podstrona<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$parametr1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$parametr2</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem kontrolerem podstrony.
			&lt;br /&gt;Przyjąłem 2 parametry:
			&lt;ul&gt;
				&lt;li&gt;Pierwszy: '</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$parametr1</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;
				&lt;li&gt;Drugi: '</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$parametr2</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;
			&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Co zrobiliśmy? Otóż dodaliśmy funkcję kontrolera (w nomenklaturze MVC częściej na funkcję w kontrolerze mówi się &#8220;akcja&#8221;), która ma za zadanie wyświetlić prosty tekst oraz zawartość dwóch przyjmowanych przez siebie parametrów. Parametry te przyjmowane są z URL&#8217;a (definiowane jako kolejne segmenty adresu). Jak więc obecnie wygląda URL tej akcji? Zobaczmy: <a href="http://localhost/kohana/index.php/home/podstrona/pierwszy_parametr/drugi_param">http://localhost/kohana/index.php/home/podstrona/pierwszy_parametr/drugi_param</a>.</p>
<h2>Epilog</h2>
<p>Nie przejmuj się nieładnym URL&#8217;em. Niedługo poznasz technikę &#8220;wycinania&#8221; index.php z adresu Twojej strony, dzięki czemu uzyskasz bardziej przejrzystą i elegancką strukturę adresu.</p>
<p>Wzorzec projektowy MVC nie pozwala nam na to, abyśmy w kontrolerze wykonywali funkcję <code>echo</code> (nigdy nie należy tego robić &#8211; niniejszy kod jest tylko tymczasowym przykładem, natomiast do wyświetlania tego typu napisów służą widoki). Dlatego też dalszą część tworzenia naszego prostego systemu blogowego będziemy prowadzić w dalszych rozdziałach. Tam wykorzystamy widoki, a później modele. Tak, by kod naszego bloga był w pełni zgodnym ze wszystkimi najważniejszymi standardami, zasadami i dyrektywami inżynierii oprogramowania.</p>
<p><strong>Kod źródłowy</strong>, użyty do tego artykułu, zajduje się <a href="http://nasza.kohanaphp.pl/files/source/kontroler/application.zip">tutaj</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
