CodeIgniter -2: Controller
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ğinerek ilk programımızı yazacağız.
Controller, basit olarak bir link ile çağırılabilen bir class dosyasıdır. Örneğin : aşağıdaki örnekte CI blog.php 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…
www.siteadiniz.com/index.php/blog/
Merhaba Dünya
Herhangi bir metin editöründe aşağıdaki kodu yazarak blog.php 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.)
<?php
class Blog extends Controller {
function index()
{
echo 'Merhaba Dünya!';
}
}
?>
Şimdi aşağıdaki linke girin;
www.siteadiniz.com/index.php/blog/
Doğru yaptıysanız “Merhaba Dünya!” yazısını göreceksiniz.
Metodlar (Fonksiyonlar)
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.
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.
www.siteadiniz.com/index.php/blog/index/
Url nin ikinci bölümü, controller ın hangi fonksiyonu çağırdığını belirler.
Şimdi yukarıdaki örneği aşağıdaki şekilde değiştirelim; (değişikliği blog.php dosyasında yapacaksınız)
<?php class Blog extends Controller { function index() { echo 'Merhaba Dünya!'; } function comments() { echo 'Bu da diğer metod'; } } ?>Şimdi şu linki çağıralım; (url nin ikinci bölümü ile comment() metodumuzu çalıştırdığımza dikkat edin)www.siteadiniz.com/index.php/blog/comments/Şimdi ise tarayıcınızda “Bu da diğer metod” yazısını göreceksiniz. Metod Parametresini url İle Geçirmek 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 products.php ismi ile application/controllers/ içine kaydedelim.<?php class Products extends Controller { function shoes($sandals, $id) { echo $sandals; echo $id; } } ?>
Sonra da aşağıdaki linki çalıştıralım;
www.siteadiniz.com/index.php/products/shoes/sandals/123
Üçü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 “sandals” ve “123″ kelimelerini yazdırır.
Varsayılan Controller Tanımlama
Url bulunamadığında ya da siteye ilk girildiğinde CI ye gitmesi için varsayılan olarak yüklenecek controller tanımlaması yapılabilir.
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;
$route['default_controller'] = ‘Blog’;
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.
Controllerları Alt Klasörlerde Organize Etmek
Bazı durumlarda controller ları alt klasörlere bölmek isteyebilirsiniz. Bunu, application/controllers içinde alt klasörler açarak yapabiliriniz.
Bunu yaptığınız zaman url ’nin ilk bölümünde klasör ismi kullanılmalıdır. Örneğin controller, “application/controllers/products/shoes.php” altında olduğunu varsayarsak url şu şekilde olmalıdır;
www.siteadiniz.com/index.php/products/shoes/123
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.
Sınıf Yapılandırıcıları (Class Constructors)
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.
Cıdeigniter’da kullanımı şu şekildedir (php5 için);
<?php
class Blog extends Controller {
function __construct()
{
parent::Controller();
}
}
?>
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.
MVC ‘nin ve dolayısı ile codeigniter’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.
Sonraki codeigniter yazılarımda görüşmek üzere, sağlıcakla kalın…
Kaynakça:

HAYDİ YA
1YAW ZATEN BUNUN VİDEO SU VAR NİYE URAŞTIN
video türkçe mi?
ben bu yazıyı yazdığım tarihte böyle bir türkçe video yoktu. belki yazıyı yazdıktan sonra başka bir hayırsever arkadaş video paylaşmış olabilir. bilemiyorum.
codeigniter sitesindeki iki videodan bahsediyorsanız onlar ingilizce. bu sitedeki amacım. internetteki türkçe içeriğe katkıda bulunmak. yoksa codeigniter manual vs bir sürü ingilizce kaynak var. bu yukarıda yazdıklarımı anlatan…
keşke video linkini de verseydiniz isteyenler videodan da faydalanabilseydi.
2Faydalı bir yazı teşekkürler. “Videosu vardı” yorumu gayet gereksiz olmuş.
3Gayet faydalı bir yazı olmuş; teşekkürler.
Codeigniter sitesinin Tutorial bölümünde bunu anlatan iki video olduğu doğru ancak bir eğitimci olarak yeni bakış açılarını kazandırmak ve bunu paylaşmak üzere gayret eden arkadaşlara teşekkür etmek yerine kabaca/ukalaca yorumlar yazmak da bir o kadar yanlış bir davranış diye düşünüyorum.
4yorumlarınız için teşekkür ederim.
yazdıklarınıza aynen katılıyorum. türkçe içerik konusunda bende sonsuz destekliyorum. özellikle kopyala yapıştır olmayan içerikleri eleştirirken dikkatli ve yapıcı olmak lazım. eksik varsa söyleyelim tabi ama tamamlayıcı olalım. eksik varsa eksiği tamamlayalım katkıda bulunalım. bu yukarıdaki kendi yazım için söylemiyorum. genel olarak bu şekilde bakmak lazım.
evet o videolar sözkonusu ancak ingilizcesi olmayan arkadaşların, en azından konunun mantığını basitçe kavrayabilmesi ve bir bakış açısı kazanabilmesi için yazmıştım bu yazıyı. öyle çok iddalı bir yazı değil. eksikleri ya da yanlış olabilir herkes gibi.
5