Codeigniter Serisi 3 – Codeigniter’i tanıyalım

PHP Programlama  Şubat 28, 2015

Codeigniter yapısını artık görme zamanı geldi. İlk olarak size dizin yapısından bahsedeceğim. Bu yapıda ne nerede olur bu konuyu irdeleyeceğiz.

Ana dizinimizde daha önce kopyalattığım üç dosya bulunmakta, bunları genel olarak anlatayım.

  • index.php, bu dosya sitemiz açıldığında fiziksel olarak başvuracağı açılış dosyası. Malumunuz PHP yazılımcısı olduğunuzu var sayarak bu yazı dizisini anlattığım için bunu detaylandırmanın manası yok. Bildiğiniz başlangıç dosyamız. Ancak bu dosya önemli şeyler içeriyor, bunu daha sonraki panel geliştirme aşamasında anlatacağım.
  • system, klasörü ise CI’nin genel alt yapı dosyalarını bulundurmakta. Bunlar fonksiyon ve sınıfları içeren php dosyalarından başka birşey değil. İsterseniz içlerinde ne varmış diye bir göz atabilirsiniz ama kendinizi çok yormayın 🙂
  • application, klasörü bizim can alıcı noktamız. Çünkü bu klasör sayesinde uygulamamızı geliştiriyoruz. Aslında biz her ne kadar site diye adlandırsak da bu bir uygulama oluyor. O nedenle manası uygulama olan application ismiyle anılıyor.

Evet ana yapı tamam şimdi application klasörünün içine girmenin zamanı geldi. Bu klasörün içeriği bizim çalışacağımız yer olduğu için iyi tanımak gerek.

2015-02-28-23_00_31-application

Hemen sıradan başlayalım anlatmaya.

Cache klasörü önbellekleme işlemi yaptığınızda eğer dosya bazlı önbellekleme yapacaksanız bu klasör kullanılıyor. Bu klasör içerisine erişilememesini garantileyin derim. Konu detaylı bir konu sonlarda değinebiliriz. O yüzden burada çok anlatmıyorum.

Config bizim için mühim klasörlerden biri. Burada çeşitli ayarlar bulunuyor. İçeriğindeki dosyalara bir göz atalım.

2015-02-28-23_04_17-config

Burada ilk dosya olarak karşımıza autoload.php çıkıyor. Bu daha sonra anlatacağım otomatik yükleme işlemi yapan yapılandırma için. Bu konusu geldiğinde anlatacağım bir olay ancak konusu geldiğinde bu dosyayı açın dediğimde burada olduğunu bilmeniz lazım.

Config.php dosyası ise genel ayarları yapmak için kullanılmakta. İçeriğinde ki ayarları hemen inceleyip yapılandıralım. İlk başta şunu söylemem gerek tüm yapılandırma ayarları $config adında bir dizinin içinde tanımlanmakta. Bu diziden daha sonra veriler okunacaktır.

base_url sitemizin çalışacağı ana adres. Bunun sebebi siz site içerisinde bir dizine CI yükleyerek tüm siteyi değilde belirli bir proje yürütmek için kullanmış olabilirsiniz. Bu durumda CI routing yapısı kafası karışmaması için bu yapılandırma ile CI nin yüklü olduğu url yi bulabilir. Buraya http://localhost/codeigniter/ yazarak ana adresimizi vermiş olduk.

$config['base_url'] = 'http://localhost/codeigniter/';

index_page sitemizin ana sayfasının dosya adı. Bunu şu an için değiştirmiyoruz çünkü index.php çalıştırıyor. CI için url rewrite yaparsanız vs ihtiyacınız olabilir.

uri_protocol adres çubuğundan parametreleri ? işaretiyle key=value mantığıylamı yoksa control/view/param mantığıylamı çalışacağını belirlemekte. Bunu değişmiyoruz AUTO gelen değeri değerlendirerek parametreleri alıyor.

url_suffix ile segmentlerin sonuna vereceğiniz dosya uzantısını ekler. Yani .html uzantısı ekleterek sanki site html ile yapılmış gibi bir his sağlayabilirsiniz. Bu alanı değiştirmiyoruz.

language ayarı ile sistem dilini ayarlayabiliryoz. Ama bu çoklu dil filan değil sadece meta için kullanılan bir seçenek. İsterseniz turkish yapabilirsiniz.

charset ayarı ile sitenizin özel bir karakter setiyle çalışmasını veya genel bir karakter seti kullanıp kullanmaması gibi bir ayar yapabilirsiniz. Bu arapça gibi bir site için işe yarayabilir. Biz UTF-8 ile genel bir karakter seti kullanacağız.

enable_hooks tuhaf ama etkileyici bir ayardır. Bu ayarın değerini TRUE yaparsanız Hooks klasöründe ki dosyalarınızı CI çalıştığında çalıştırmaya başlar. Bu CI sizin application da yazdığınız kodlar çalışmadan önce çalışabilen bir kod elde etmek demektir. Özel bir ihtiyaç için kullanabilirsiniz, ancak sistemi tehlikeye atabileceği için FALSE kalmasında şimdilik fayda var. Hook işlemini CI nin son konularında anlatacağım.

subclass_prefix değeri eğer standart CI classları dışında ara classlar oluşturacaksanız bunların prefixini belirtir. Bu aşamada derinleştirmeyeceğim, kendi controller ve model base sınıflarınızı geliştirme gibi konularda değineceğim.

permitted_uri_chars üzerinde pek değişiklik yapılması istenmeyen bir ayardır ama uzmanlar için konulmuştur. Ayar sayesinde adres çubuğuna hangi karakterlerin kabul edileceğini belirler.

allow_get_array ile $_GET üzerinen parametre okumanızı sağlar. Varsayılan olarak CI bunu yapmanızda bir sakınca görmez. Ancak güvenlik artırıcı bir proje yürütecekseniz kapatabilirsiniz.

enable_query_strings sitenizin adres çubuğuna ?kim=ben&ne=hersey&nerede=burda gibi parametleri kullanmamızı sağlar. Bu normalde pek mantıklı bir şey değildir. Ancak server yapılandırmanıza göre ihtiyaç duyabilirsiniz.

controller_trigger değeri bir controlleri verdiğiniz değerle çağırır. örneğin c değeri verirsek http://localhost/index.php?c=home ile home adında ki controller işleme çağrılır.

function_trigger değeri bir controller değeriyle birlikte fonksiyonu çağırır. örneğin f değeri verirsek http://localhost/index.php?c=home&f=index ile home controller içerisinde index fonksiyonuna erişir.

directory_trigger kullanılmamaktadır.

log_threshold ayarı 0: log yapma, 1: hata mesajlarını logla, 2: debug mesajlarını logla, 3: bilgi mesalarını logla, 4: herşeyi logla şeklindedir. Bu ayar standartta kapalıdır.

log_path ile logların kaydedileceği dizini belirtebilirsiniz. Bu ayar log_threshold ayarı açılmış ise gerekir.

log_date_format ise logların tarih formatını ayarlamanızı sağlar.. Varsayılan değeri değişebilirsiniz.

cache_path ayarı cache işlemleri için kullanılır. Eğer boş bırakırsanız application dizininde ki cache klasörüne yapılır. Değiştirmek için bu ayarı kullanabilirsiniz.

encryption_key session üzerinde tuttuğunuz dataları şifreleme yapar. Bu ayarı muhakkak yapılandırın demektedir. 32 karakter (harf rakam ve sembol) ile 128 bitlik bir string girmenizi istemektedir. randomkeygenerator.com adresinde rastgele key ürettirebilirsiniz. Hatta bu sitede Codeigniter için key üreten bir alan bile var, ekrandaki başlıklara bakarsanız görebilirsiniz.

sess_ ile başlayan değerler session için yapılandırmadır. Bu aşamada konumuz dışındadır değiştirmeden devam ediyoruz.

cookie_ ile başlayan değerler çerezler için yapılandırmadır. Bu aşamada değiştirmiyrouz.

global_xss_filtering ile GET, POST ve COOKIES üzerinden gelen değerleri güvenli kılınmasını sağlar. Yani metin filtresine alır. Bu ayarı FALSE bırakarak geçiyoruz. Bu aşamada böyle bir ihtiyaç yok.

csrf_ ile başlayan değerler çapraz site isteği içindir bu konuya girmiyoruz.

compress_output değeri çıktılar için sıkıştırma yapmaya yarar. Bu sayede daha az veri transferi yapılabilir. Ancak echo çağrıları bu kapsam dışındadır. Ayrıca browser cache yönelimini sağladığı için bazen sitedeki css vs değişikliklerini browser geç algılayabilir. Bu ayarı detaylıca öğrenmeden kullanmayın.

time_reference ayarı sitedeki zaman bilgileri serverin kurulu olduğu saatimi göze alsın yoksa gmt üzerinden mi çalışsın şeklinde belirler.

rewrite_short_tags ayarı serveriniz destekliyorsa kısa tag yapısını bu ayarı çalıştırabilirsiniz.

proxy_ips sunucunuz bir proxy arkasında çalışıyorsa bu bilgiyi belirterek uygulamanın dışarı erişimini sağlayabilirsiniz.

Yapılandırma dosyamız yani config.php ile ilgili bilgiler bu kadar. Sıradaki dosya constants ki bu dosya ile şu anda işimiz yok sadece sabit değerleri yönetmekte. Bir kaç sabit tanımlanmıştır içinde.

database.config dosyası database yapılandırmanız içindir. Burada standart database yapılandırması dışında bir husus bulunmaktadır. $active_group değeri varsayılan db niz içindir. Burada default olarak belirlenmiştir. Eğer birden fazla db kullanacaksanız $db dizininin ilk parametresini her bir db yapılandırması için belirtmeniz gerekmektedir. Bu hususun detayına daha sonra db oluştururken değineceğim. Ancak active group değerine ait bir db yapılandırması yapmak şart. parametreleri açıklamayacağım ama $active_record değerini kısaca anlatmam gerekirse db işlemlerini active record classı üzerinden yürütmek için bu parametrenin true olması şart. Active record model konusunda detaylıca anlatılacaktır.

doctypes.php ile döküman tipi yapılandırması bulunmakta. Ancak bu dosyayı değişmemek bizim için en ideal husus olacaktır.

migration.php veritabanı versiyonlama için kullanılan bir yöntemdir. Bu işlemi kullanmayacağımız için es geçiyoruz.

mimes.php mime type şeklinde adlandırılan dosya tiplerini belirler. Bu şekilde dosya uzantıları için mimeler bilinebilmektedir. Listede olmayan dosya tipi için elle mime tipleri ekleyebilirsiniz.

profiler.php ile eğer data profile yapacaksanız burada yapılandırma yapmalısınız. Ancak bu konumuz dışındadır.

routes.php varsayılan controller adını ve 404 için hangi controllerin kullanılacağını belirler. Routing konusu bir sonraki yazının başlığıdır, o yüzden şu aşamada girmeyeceğim.

smileys.php bizim gülücük dediğimiz 🙂 ifadenin gifler ile değişmesini sağlar. Bu işlem için bir helper class bulunmaktadır. Bu konu kapsamımız dışındadır.

user_agents.php hangi browserin yada mobil, desktop browser mi olup olmadığını kontrol etmemiz için kullanılan bir tanım dosyası. Burada olmayan bir browserden haberiniz var ise ekleyebilirsiniz.

Config dizini hakkında bilgi verdikten sonra sırada controllers dizininden bahsedeceğim. Controller bizim daha önce bahsettiğimiz gibi model ve view arasında köprü görevi gören ve gelen istekleri işleyen sınıfların bulunduğu klasördür. İçinde ki welcome.php dosyası CI nin browserde gördüğümüz varsayılan sayfasını bize ulaştıran controllerdir.

Core klasörü özgün Controller ve Model base classlarını geliştirebileceğimiz klasördür. Burada ayrıca var olan helper ve diğer fonksiyonel sınıflarıda devralarak geliştirebilirsiniz. Buradaki dosyaların ve sınıfların adlarının başında config.php de belirttiğimiz subclass prefix değeri ile başlamalıdır. Varsayılan olarak config de MY_ şeklinde ayarlanmıştır ve bu ayarı değişmediysek kendi base controllerimiz için MY_Controller.php şeklinde dosya oluşturmamız gerekir. CI otomatik olarak bu prefixle başlayan dosyaları tarayarak yükler.

Errors klasörü altında varsayılan hata sayfaları bulunmaktadır. Buradan değişebilirsini.

Eğer harici helperler geliştirmek istiyorsanız helpers klasörü altında çalışmanız gerekmektedir. İlerleyen süreçte özgün helper geliştirme konusunda örnek yapacağız.

Hooks konusu biraz tuhaf bir konudur. CI kendi tamamen yüklenmeden önce bazı anlarda sizin belirli kodları çalıştırmanıza izin verir. Bu aşamada bir koda ihtiyaç duyacaksanız hook dosyalarını burada oluşturabilirsiniz. Konumuz dışındadır ancak zamanla bloğumda değinmeyi düşünmekteyim.

Language klasörü eğer sistemde birden fazla dil kullanacaksanız burada dil dosyaları geliştirmenizi sağlar. Bu konu daha sonra incelenecektir.

Libraries kendi kütüphanelerinizi veya Github gibi opensource kaynaklarından edindiğiniz kütüphaneleri buraya yerleştirerek daha CI içerisinden çağırmanızı sağlar. Bu konuya daha sonra değinilecektir.

Logs klasörü log sistemini aktif ettiyseniz burada CI tarafından atılan loglar bulunur.

Models klasörü veritabanı ve veri kaydeden diğer hususlarda verilerinizi yöneten sınıfları barındırır. Buraya veritabanı işlemleri yaptığımızda çeşitli model sınıfları oluşturarak çalışmalarımız olacaktır. Modeller hatırladığınız gibi Controller tarafından erişilerek verilerin alınıp verildiği sınıflardı.

Third_party klasörü CI içine entegre edemediğiniz 3. parti kod gibi hususları barındırmanız için bulunduracağınız klasördür.

Views klasörü Controller tarafından ekrana bilgi aktarılmasını sağlayan HTML, CSS, JS ve görsel öğelerin ağırlıkla bulunduğu yerdir. View dosyaları php uzantılı olup php kodları çalıştırabilirler ancak verileri sayfaya yerleştirmek dışında kalan mantıksal işlemler yapılmamalıdır. Bu durum zaten CI nin mantığına ters düşer.

Bu yazımda da CI genel dizin yapısını görmüş olduk. Bir daha ki yazımda Routing konusunu anlatarak sistemin çalışma anında nasıl davrandığına değineceğim. Görüşünceye dek esenlikle kalın…

Bu yazı 8358 defa görüntülendi

“Codeigniter Serisi 3 – Codeigniter’i tanıyalım” için 2 cevap

  1. Selim U dedi ki:

    Hocam elinize saglik. CI’ye yeni basladim bu makaleler oldukca yararli oluyor. Umarım bu kanaatim degismez. Zaman ayirdiginiz icin tesekkur ederim.

  2. alabanda dedi ki:

    teşekkürler Halit kardeş umarım devamı gelir

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yazar Hakkında

15 yıllık çalışma hayatında birçok proje geliştirmiş binlerce projeyi inceleme fırsatı bulmuş yazılım aşığıdır. İşini hobi olarak gören yazarımız iş hayatını profesyonelce zevkle sürdürmektedir.

Son Eklenenler