Ana içeriğe atla

Klasik PHP'den Codeigniter Geçiş Klavuzu (Controller)

 Merhaba arkadaşlar;


Bu yazımızda php geliştirenlerin oldukça aşina olduğu bir mvc ürünü olan Codeigniter frameworkünün kullanımını anlatacağım. 2006 yılından beri geliştirilmesine devam edilen CI (Codeigniter), an itibari ile 3.1 sürümünde. Codeigniter 4.0 sürümünün ise yakın bir süre içerisinde çıkmasını bekliyoruz.

Codeigniterın startup tarihinin oldukça eskiye dayanması ve geliştirme sürecinin halen devam  ediyor olması nedeniyle php yazılım uzmanları için doğru bir mvc frameworkü olduğunu düşünüyorum.

MVC yapıısının ne olduğu konusunda internet üzerinde bir çok makale okuyabilirsiniz. Ancak ben düz php yazanların hızlı bir şekilde geçişini sağlayacak basit bir makale yazmak istiyorum.

Not : Yazımın devamına sözkonusu frameworkün adını CI şeklinde ifade ederek devam edeceğim.

Not : Makaleyi okumaya başlamadan önce php programlama dilinde sınıf ve fonksiyon oluşturmak, başka sınıflardandan miras almak gibi temel konular hakkında bilgi sahibi olmanız gerekiyor. Bu konuda kendinizi pekiştirmek için linki tıklayınız.

Sayfadaki konu anlatımı ve php örnekleri sizin için yeterli gelecektir.

 

1) CI Kurulumunu Nasıl Yapacağım?


Aşağıdaki videoda kurulum işlemini hızlı bir şekilde gerçekleştirmiş. Aslında yapılan işlem çok basit. CI'nin orjinal web sitesinden dosyaları alıp local veya hosting sunucunuza olduğu gibi kopyalayın.



Eğer CI'yi bilgisayarınıza nasıl kopyalacağınızı biliyorsanız bu adımı geçebilirsiniz. Video'daki eğitmen dosyaları kopyaladıktan sonra welcome view'i üzerinde değişiklikler yaparak ekrana basmış.

 2) Kodlarımı nereye yazacağım?

 

application klasörü altında dosyalar oluşturup kodlar yazacağız.  İlk başta controllers, models ve views klasörlerine odaklanalım. İlerleyen makalelerimizde diğer klasörlere de değineceğiz.

3) Controllerın amacı nedir?


Geliştirdiğiniz web sitelerinde sistem yapısını GET yöntemi ile belirliyordunuz. MVC frameworklerin hepsinde bu işleri yapabilmeniz için controllers tanımlamak zorundasınız.

Örnek olarak;
http://demosite.com/urun.php?id=14 
şeklinde url yapısına sahip bir web siteniz var. Bu yapıda bir senaryoyu CI üzerinde gerçekleştirmek için controller klasörü altında Urun.php şeklinde dosya oluşturup örnekteki gibi bir controller tanımlamamız gerekiyor.

Aşağıdaki kodu  kopyalayıp, bilgisayarınızda oluşturduğunuz /application/controllers/Urun.php  dosyasını açıp php taglarının arasına dikkatlice yapıştırın.

defined('BASEPATH') OR exit('No direct script access allowed');

class 
Urun extends CI_Controller{
  
    public function 
index(){
        echo 
"Ürun ana sayfasına hoşgeldiniz.";
    }
  
    public function 
id($id){
        echo 
$id " numaralı ürunu getir";
    }
}



Adres çubuğunuza, http://demoadres.com/urun/id/14  şeklinde adres yazdığınız taktirde;
14 numaralı ürunu getir 
mesajı ile karşılaşacaksınız. Şimdi ilk yazdığımız kodu biraz inceleyelim.

Not : Oluşturduğumuz Urun.php ile tanımladığımız Urun sınıfının isimleirnde U harfinin büyük olduğu dikkatinizi çekmiştir. Başka dosya veya controller sınıfı oluşturuken bu hususu dikkate alınız. 

a) defined('BASEPATH')  :  Sitemizin include bazlı hacking ataklarını engellemek amacıyla yazılmış satırdır.  Bu satırı bütün oluşturduğumuz dosyalara yazıyoruz. Tabi bununla birlikte CI bir çok güvenlik önlemini ve metodu hazır bir şekilde ayağınıza getiriyor. Ancak bu konulara daha sonra değineceğiz.

b) class Urun extends CI_Controller : Şayet bir controller oluşturmak istiyorsanız zaruri olarak CI_Controller class'ından miras almanız gerekiyor. MVC yapılarının hemen hemen hepsi bu şekilde çalışıyor. Yani, CI_Contoroller sınıfından türemiş controller türünde Urun sınıfımız var artık. Tabi buna benzer ilişki model oluştururken de karşımıza çıkacak . Örnek olarak Urun isminde tanımlayacağımız bir model sınıfını  CI_Model sınıfından miras alarak oluşturacağız. Bu konuya daha sonra models bölümünde detaylandıracağız.

c) public function index() :  Bu bir MVC standardı desek yanlış olmaz sanırım. Controller'ın varsayılan olarak çalışacak fonksiyonudur.

Örnek olarak projenizde ürünler anasayfası olduğunu düşünün.

http://demosite.com/urun şeklinde tarayıcıdan erişim yaptığnız zaman urun controlleri içerisinde varsayılan olarak önce index() fonskiyonu çalışır akabinde içeriğini ekrana getirir.

Yukarıda tanımladığımız controllerdaki index() fonksiyonu
Ürun ana sayfasına hoşgeldiniz.
 şeklindeki içeriği ekrana basar.

d) public function id($id) :  GET yöntemiyle geliştirdiğimz sayfalardaki gibi yapısnı kendi belirlediğimiz fonksiyondur.

Senaryomuz gereği Urun controller içerisinde tek bir ürün verisi çekilecek. Bunun için id şeklinde bir fonksiyon oluşturduk. GET yönteminde aşina olduğumuz ürün id'sini belirleyen anahtar değşkeni fonksiyon içerisinde argüman olarak tanımladık.

Şimdi tarayıcımızı http://demosite.com/urun/id/12  şeklinde yazdığımız taktirde bizim id fonksiyonumuzu çağıracak ve içeriğini görüntüleyecek.

e) Controller kısmı hakkında farklı bir senaryo düşünelim.
http://demosite.com/urunler.php?stok=mevcut&siralama=coksatilan

Şimdi böyle bir yapıyı CI üzerinde nasıl gerçekleştirebiliriz küçük bir örnek ile açıklayalım.

defined('BASEPATH') OR exit('No direct script access allowed');

class 
Urun extends CI_Controller{
  
    public function 
index(){
        echo 
"ana sayfa";
    }
  
    public function 
hepsi($stok ''$siralama ''){
        echo 
$stok 'olanlar ' $siralama ' şeklinde listelenecek';
    }
    

    public function id($id){
      
        echo 
$id " numaralı ürunu getir";
    }
}



hepsi($stok = '', $siralama = '') yapısında bir fonksiyon tanımladık.  $stok ve $sirailama değerlerinin boş gelebileceğini öngörerek "" şeklinde boş bir string ifade set ettik. Adres çubuğuna

http://demosite.com/urun/hepsi/mevcut/coksatilan

yazdığınızda aşağıdaki mesaj ekrana gelecektir.

mevcut olanlar coksatilan şeklinde listelenecek

Makale Sonu


Bu makalede sadece controllerdan bahsettik. Sistemi kullanmaya başlamak için en azından models ve views yöntemleri konusunda da bilgimizin olması gerekiyor.  Controllers tanımlamayı anladıysanız diğer yöntemleri öğrenmekte zorluk çekmeyeceksiniz. Bir sonraki makalelerde Model'e controllerdan istek gönderip verileri oluşturmayı, daha sonra elimizdeki verileri view 'e ulaştırıp istediğimiz html şablonunda bilgilerimiz ekrana basmayı öğreneceğiz. 

Yorumlar

Bu blogdaki popüler yayınlar

Windows, Docker ve VSCode ile Kusursuz PHP Debug Ortamı Kurulumu

Windows üzerinde PHP geliştirirken performans sorunları ve "dosya yolunda çalışmama" gibi hatalardan sıkıldınız mı? Bu rehberde; Apache, MySQL ve Xdebug 3 kullanarak, VSCode ile tam senkronize çalışan, yüksek performanslı bir geliştirme ortamını nasıl kuracağınızı anlatıyorum. ⚠️ Gereksinimler Windows 10/11 (WSL 2 yüklü olması önerilir). Docker Desktop. VSCode. 1. Proje Yapısı Öncelikle projenizin ana dizininde ( C:\Users\user\htdocs_debug ) aşağıdaki klasör ve dosyaları oluşturun: /html (Kodlarınız burada olacak) /mysql_data (Veritabanı verileriniz burada saklanacak) docker-compose.yml Dockerfile 2. Docker Yapılandırması docker-compose.yml dosyanıza aşağıdaki içeriği ekleyin. Bu yapı, Apache'yi 8888 portunda, MySQL'i ise 3312 portunda çalıştıracaktır: YAML version: '3.8' services: web: build: . container_name: phpserver_debug ports: - "8888:80" volumes: - ./html:/var/www/html extra_hosts: -...

Modern Web Standartları: SEO ve Performans Optimizasyonu Rehberi

 Bir web projesinin başarısı, sadece görselliğiyle değil; kullanıcı deneyimi (UX), erişilebilirlik, SEO ve performans gibi "kaputun altındaki" teknik detaylarla ölçülür. Yakın zamanda bir web projemizde gerçekleştirdiğimiz kapsamlı revizyon sürecini ve Lighthouse skorlarını maksimize etmek için uyguladığımız teknikleri bu yazıda derledik. 1. Erişilebilirlik (Accessibility) İyileştirmeleri Webin herkes için eşit derecede ulaşılabilir olması bir tercih değil, zorunluluktur. Bu doğrultuda şu adımları uyguladık: Görsel ve ARIA Etiketleri: Tüm görsellere anlamlı alt metinleri eklendi. Sadece ikon içeren (sosyal medya butonları gibi) elemanlara, ekran okuyucuların ne olduğunu anlaması için aria-label tanımlamaları yapıldı. Form Erişilebilirliği: İletişim formlarındaki her input , bir label etiketiyle ( for niteliği kullanılarak) eşleştirildi. Bu, hem ekran okuyucular hem de tıklama kolaylığı açısından kritik bir dokunuş. Hiyerarşik Yapı: Başlık etiketlerinin (h1...h6) sırası...

Web Sitelerinde Kullanıcı Rızası ve Google Analytics Entegrasyonu: Neden ve Nasıl?

 Dijital dünyada kullanıcı gizliliği artık bir tercih değil, yasal bir zorunluluktur. Eğer bir web siteniz varsa ve ziyaretçi trafiğini analiz etmek için Google Analytics kullanıyorsanız, kullanıcılarınızdan izin almadan veri toplamanın ciddi sonuçları olabilir. Bu yazımızda, kullanıcı rızasının önemini inceleyecek ve PHP kullanarak basit ama etkili bir rıza yönetim mekanizmasını nasıl kurabileceğinizi öğreneceğiz. 1. Kullanıcı Rızası (Consent) Neden Önemli? Web sitenize giren bir kullanıcının davranışlarını takip etmek, aslında onun kişisel verilerine dokunmak demektir. İşte rıza almanız için 3 temel sebep: Yasal Uyumluluk (KVKK & GDPR): Türkiye’de KVKK , Avrupa’da ise GDPR yasaları, kullanıcıların çerezler (cookies) aracılığıyla takip edilmeden önce bilgilendirilmesini ve onayının alınmasını şart koşar. Dijital Etik ve Güven: Ziyaretçilerinize verilerini nasıl kullandığınızı sormak, markanızın şeffaflığını ve profesyonelliğini gösterir. Veri Kalitesi: Google’ın yeni Con...