﻿<?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>ibonette.com &#187; controller</title>
	<atom:link href="http://www.ibonette.com/tag/controller/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ibonette.com</link>
	<description>Samimi olmayi vaat edebilirim ama tarafsiz olmayi asla...</description>
	<lastBuildDate>Sun, 29 Aug 2010 09:21:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CodeIgniter -2: Controller</title>
		<link>http://www.ibonette.com/codeigniter-2-controller/</link>
		<comments>http://www.ibonette.com/codeigniter-2-controller/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:03:04 +0000</pubDate>
		<dc:creator>ibrahim</dc:creator>
				<category><![CDATA[PROGRAMLAMA]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[codeigniter controller]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[Controllerları Alt Klasörlerde Organize Etmek]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[Medotlar (Fonksiyonlar)]]></category>
		<category><![CDATA[Metod Parametresini url İle Geçirmek]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php framework]]></category>
		<category><![CDATA[Sınıf Yapılandırıcıları (Class Constructors)]]></category>
		<category><![CDATA[Varsayılan Controller Tanımlama]]></category>

		<guid isPermaLink="false">http://www.ibonette.com/?p=93</guid>
		<description><![CDATA[Bir önceki yazımda CodeIgniter ' a başlangıç yapmıştık. Şimdi konuyu biraz daha ilerletip CodeIgniter çalışma yapısını anlamak için öncelikle kavramamız  gereken MVC 'nin ilk ayağına, yani controller kavramına değineceğiz.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ibonette.com/codeigniter-1-baslangic/" target="_blank">Bir önceki</a> yazımda CodeIgniter &#8216; a başlangıç yapmıştık. Şimdi konuyu biraz daha ilerletip CodeIgniter çalışma yapısını anlamak için öncelikle kavramamız  gereken MVC &#8216;nin ilk ayağına, yani controller kavramına değinerek ilk programımızı yazacağız.</p>
<p>Controller, basit olarak bir link ile çağırılabilen bir class dosyasıdır. Örneğin : aşağıdaki örnekte CI   <em>blog.php</em> isimli controllerı bulup yüklemeye çalışır. Sonuç olarak url deki ilk bölümle aynı isimli class dosyası çalıştırılır. Linkte .php uzantısının kullanılmadığına dikkat edin&#8230;</p>
<p>www.siteadiniz.com/index.php/blog/</p>
<p><strong>Merhaba Dünya</strong></p>
<p>Herhangi bir metin editöründe aşağıdaki kodu yazarak <em>blog.php</em> ismi ile application/controllers/  dizininin içine kaydedelim; (Kod içindeki class ismi büyük harfle başlamalıdır. Küçük harfle başlayamaz. blog olamaz Blog olmalıdır.)</p>
<pre><strong><span><strong><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php
</span><span style="color: #007700;">class </span><span style="color: #0000bb;">Blog </span><span style="color: #007700;">extends </span><span style="color: #0000bb;">Controller </span><span style="color: #007700;">{
    function </span><span style="color: #0000bb;">index</span><span style="color: #007700;">()
    {
        echo </span><span style="color: #dd0000;">'Merhaba Dünya!'</span><span style="color: #007700;">;
    }
}
</span><span style="color: #0000bb;">?&gt;</span></span></code></strong></span></strong></pre>
<p>Şimdi aşağıdaki linke girin;<br />
www.siteadiniz.com/index.php/blog/<br />
Doğru yaptıysanız “Merhaba Dünya!”  yazısını göreceksiniz.</p>
<p><strong>Metodlar (Fonksiyonlar)</strong></p>
<p>Bildiğiniz gibi sınıfların en önemli parçalarından birisi metotlardır. Controllerında bir sınıf olduğunu söylemiştik. Aynen url nin ilk parçasında ilgili kontrollerı çalıştırdığımız gibi, metod ve metodların parametrelerini de url ile içerisinden çağırabiliriz.</p>
<p>Yukarıdaki örnekte çalışacak metod ismi index() dir. Url nin ikinci bölümü boş ise index() varsayılan olarak yüklenir.  Yukarıdaki örnekte “Merhaba Dünya!” yazısını görmenin bir diğer yolu ise aşağıdaki linki takip etmektir.</p>
<p>www.siteadiniz.com/index.php/blog/index/</p>
<p><em>Url nin ikinci bölümü, controller ın hangi fonksiyonu çağırdığını belirler.</em></p>
<p>Şimdi yukarıdaki örneği aşağıdaki şekilde değiştirelim; (değişikliği blog.php dosyasında yapacaksınız)</p>
<pre><strong><span><strong><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php
</span><span style="color: #007700;">class </span><span style="color: #0000bb;">Blog </span><span style="color: #007700;">extends </span><span style="color: #0000bb;">Controller </span><span style="color: #007700;">{
    function </span><span style="color: #0000bb;">index</span><span style="color: #007700;">()
    {
        echo </span><span style="color: #dd0000;">'</span></span></code></strong></span></strong><strong><span><span><strong><span><strong><code><span style="color: #000000;"><span style="color: #dd0000;">Merhaba Dünya!</span></span></code></strong></span></strong></span></span></strong><strong><span><strong><code><span style="color: #000000;"><span style="color: #dd0000;">'</span><span style="color: #007700;">;
    }
    function </span><span style="color: #0000bb;">comments</span><span style="color: #007700;">()
    {
        echo </span><span style="color: #dd0000;">'Bu da diğer metod'</span><span style="color: #007700;">;
    }
}
</span><span style="color: #0000bb;">?&gt;</span></span></code></strong></span></strong><!--[endif]-->

<span style="font-size: 10pt; font-family: Arial;">Şimdi şu linki çağıralım; (url nin ikinci bölümü ile comment() metodumuzu çalıştırdığımza dikkat edin)</span>
<code><span style="font-size: 10pt; font-family: Arial;">www.siteadiniz.com/index.php/</span></code><var><strong><span style="font-size: 10pt; font-family: Arial;">blog</span></strong></var><code><span style="font-size: 10pt; font-family: Arial;">/</span></code><samp><strong><span style="font-size: 10pt; font-family: Arial;">comments</span></strong></samp><code><span style="font-size: 10pt; font-family: Arial;">/</span></code>
<span style="font-size: 10pt; font-family: Arial;">Şimdi ise tarayıcınızda “Bu da diğer metod”  yazısını göreceksiniz.
<strong>
Metod Parametresini url İle Geçirmek</strong>

Eğer url ikiden fazla bölüm içeriyorsa, 3 ve sonraki bölümler, ilgili metoda parametre olarak aktarılır.
Örneğin aşağıdaki kodu <em>products.php</em> ismi ile application/controllers/  içine kaydedelim.

</span><strong><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php
</span><span style="color: #007700;">class </span><span style="color: #0000bb;">Products </span><span style="color: #007700;">extends </span><span style="color: #0000bb;">Controller </span><span style="color: #007700;">{
    function </span><span style="color: #0000bb;">shoes</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$sandals</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$id</span><span style="color: #007700;">)
    {
        echo </span><span style="color: #0000bb;">$sandals</span><span style="color: #007700;">;
        echo </span><span style="color: #0000bb;">$id</span><span style="color: #007700;">;
    }
}
</span><span style="color: #0000bb;">?&gt;
</span></span></code></strong></pre>
<p><!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} code 	{font-family:"Courier New"; 	mso-ascii-font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:"Courier New"; 	mso-bidi-font-family:"Courier New";} kbd 	{font-family:"Courier New"; 	mso-ascii-font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:"Courier New"; 	mso-bidi-font-family:"Courier New";} samp 	{font-family:"Courier New"; 	mso-ascii-font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:"Courier New"; 	mso-bidi-font-family:"Courier New";} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 70.85pt 70.85pt 70.85pt; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --></p>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Normal Tablo"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} --> Sonra da aşağıdaki linki çalıştıralım;</p>
<p>www.siteadiniz.com/index.php/products/shoes/<strong>sandals</strong>/<strong>123</strong></p>
<p>Üçüncü ve dördüncü bölümlerdeki bilgiler fonksiyon parametrelerine değer olarak atanır ve bu parametrelere uygun bilgileri sayfaya alır. Yani tarayıcıya &#8220;sandals&#8221; ve &#8220;123&#8243; kelimelerini yazdırır.</p>
<p><strong>Varsayılan Controller Tanımlama</strong></p>
<p>Url bulunamadığında ya da siteye ilk girildiğinde CI ye gitmesi için varsayılan olarak yüklenecek controller tanımlaması yapılabilir.</p>
<p>Default Controller (varsayılan controller) tanımlaması yapmak için application/config/routes.php içindeki aşağıdaki kodla gerekli değişiklik yapılabilir;<br />
<em> $route['default_controller'] = &#8216;Blog&#8217;;</em></p>
<p>Blog, burada varsayılan olarak yüklenecek controller adıdır. Bu ayardan sonra, eğer yukarıdaki örnekte ana index.php dosyanızı herhangi bir url bölümü kullanmadan çalıştırırsanız, “Merhaba Dünya!” yazsını görürsünüz.</p>
<p><strong>Controllerları Alt Klasörlerde Organize Etmek</strong></p>
<p>Bazı durumlarda controller ları alt klasörlere bölmek isteyebilirsiniz. Bunu, <em>application/controllers</em> içinde alt klasörler açarak yapabiliriniz.</p>
<p>Bunu yaptığınız zaman url ’nin ilk bölümünde klasör ismi kullanılmalıdır. Örneğin controller,   “application/controllers/<strong>products</strong>/shoes.php” altında olduğunu varsayarsak url şu şekilde olmalıdır;<br />
www.siteadiniz.com/index.php/<strong>products</strong>/shoes/123</p>
<p>Her bir alt klasör varsayılan controller içerebilir. Alt katagoriye giden bir link bulunamadığında ya da benzer bir durumda varsayılan controller olarak çalışmak üzere ayrı bir varsayılan conroller tanımlanabilir. Bu, application/config/routes.php dosyasından yapılır.</p>
<p><strong>Sınıf Yapılandırıcıları (Class Constructors) </strong></p>
<p>Yapılandırıcılar, sınıftan nesne oluştururken bazı varsayılan değerleri ayarlamak ya da bazı varsayılan işlemleri çalıştırmak için kullanılır. Bildiğiniz gibi yapılandırıcılar, değer döndürmez. Sadece belli varsayılan işleri yapar. Yapılandırıcılar (consructors) hakkında daha fazla bilgi için php5 de nesne tabanlı programlama konusu incelenmelidir.</p>
<p>Cıdeigniter&#8217;da kullanımı şu şekildedir (php5 için);</p>
<pre><strong><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php
</span><span style="color: #007700;">class </span><span style="color: #0000bb;">Blog </span><span style="color: #007700;">extends </span><span style="color: #0000bb;">Controller </span><span style="color: #007700;">{
       function </span><span style="color: #0000bb;">__construct</span><span style="color: #007700;">()
       {
            </span><span style="color: #0000bb;">parent</span><span style="color: #007700;">::</span><span style="color: #0000bb;">Controller</span><span style="color: #007700;">();  
       }
}
</span><span style="color: #0000bb;">?&gt;
</span></span></code></strong></pre>
<p>Burada   parent::Controller();  kodunu kullanmak durumundayız çünkü yerel yapılandırıcı, parent controller ‘ı ezeceği için, onu manuel olarak çağırmamız gerekir.</p>
<p>MVC &#8216;nin ve dolayısı ile codeigniter&#8217;in bel kemiği olan controller kavramından genel olarak bu kadar değinmek yeterli olacaktır sanırım. Zaten CI ile uygulama geliştirme sürecimiz çok büyük oranda controller, model ve view dosyaları yazmaktan ibaret olduğu için bu konuyu iyi öğrenmek durumdayız.</p>
<p>Sonraki codeigniter yazılarımda görüşmek üzere, sağlıcakla kalın&#8230;</p>
<p><span style="text-decoration: underline;"><strong>Kaynakça:</strong></span></p>
<p><a href="http://codeigniter.com/user_guide/" target="_blank">CodeIgniter Kullanıcı Klavuzu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ibonette.com/codeigniter-2-controller/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
