Takip et

Küçük Bir Web Uygulamasını CakePHP ile Bir VPS Üzerinde Oluşturma (Bölüm 1)

Küçük Bir Web Uygulamasını CakePHP ile Bir VPS Üzerinde Oluşturma (Bölüm 1) Web geliştirme dünyasında, dinamik ve etkileşimli uygulamala

Küçük Bir Web Uygulamasını CakePHP ile Bir VPS Üzerinde Oluşturma (Bölüm 1)

Web geliştirme dünyasında, dinamik ve etkileşimli uygulamalar oluşturmak her zamankinden daha önemli hale gelmiştir. Bu uygulamaları hayata geçirmek için sağlam bir altyapı ve verimli bir geliştirme çatısı (framework) seçimi kritik rol oynar. Bu makalede, hızlı ve düzenli web uygulamaları geliştirmek için popüler bir PHP framework’ü olan CakePHP’yi, tam kontrol ve esneklik sunan bir Sanal Özel Sunucu (VPS) üzerinde nasıl kuracağımızı ve basit bir uygulama geliştirmeye nasıl başlayacağımızı adım adım inceleyeceğiz. Bu, serinin ilk bölümüdür ve temel kurulumdan basit bir uygulamanın listeleme kısmına kadar olan süreci kapsayacaktır.

Giriş: CakePHP ve VPS Dünyasına Hoş Geldiniz

Modern web uygulamaları, kullanıcı deneyimini zenginleştiren, veri odaklı ve ölçeklenebilir yapılar gerektirir. Bu ihtiyaçları karşılamak için geliştiriciler, MVC (Model-View-Controller) mimarisine dayalı framework’leri tercih etmektedir. CakePHP, bu framework’lerden biridir ve “convention over configuration” (yapılandırma yerine kural) felsefesiyle hızlı geliştirme imkanı sunar. Temiz kod yapısı, güçlü ORM (Object-Relational Mapping) yetenekleri ve kapsamlı kütüphaneleri ile CakePHP, hem yeni başlayanlar hem de deneyimli geliştiriciler için cazip bir seçenektir.

Diğer yandan, bir web uygulamasını barındırmak için birçok seçenek mevcuttur. Paylaşımlı hosting, yönetilen hosting ve bulut sunucular gibi alternatifler arasında VPS, geliştiricilere mükemmel bir denge sunar. VPS, fiziksel bir sunucunun sanal olarak birden çok izole bölüme ayrılmasıyla oluşur. Her bir VPS, kendi işletim sistemine, kaynaklarına ve root erişimine sahiptir. Bu, size sunucunuz üzerinde tam kontrol sağlar, istediğiniz yazılımları kurmanıza, güvenlik ayarlarını yapmanıza ve performansını optimize etmenize olanak tanır. Paylaşımlı hosting’in kısıtlamalarından kurtulurken, tam bir fiziksel sunucunun karmaşıklığı ve maliyetinden kaçınmış olursunuz.

Bu makalenin amacı, CakePHP’nin sunduğu kolaylıkları bir VPS’in esnekliği ile birleştirerek, kendi web uygulamanızı nasıl hayata geçireceğinizi göstermektir. Bölüm 1’de, bir VPS’i nasıl hazırlayacağımızı, gerekli yazılımları (web sunucusu, PHP, veritabanı) nasıl kuracağımızı, Composer’ı nasıl yükleyeceğimizi ve basit bir CakePHP projesi oluşturup, ilk veritabanı bağlantısını ve temel bir liste görünümünü nasıl yapılandıracağımızı öğreneceksiniz.

Neden CakePHP ve Neden Bir VPS?

Bir projeye başlarken teknoloji yığını seçimi çok önemlidir. CakePHP ve VPS kombinasyonunun size neden avantaj sağlayacağını daha yakından inceleyelim.

Neden CakePHP?

* MVC Mimarisi: CakePHP, uygulamanızı Model (veri), View (görünüm) ve Controller (iş mantığı) katmanlarına ayırarak kodunuzu düzenli ve yönetilebilir kılar. Bu, büyük projelerde geliştirme sürecini kolaylaştırır ve ekip çalışmasını destekler.
* Hızlı Geliştirme: “Convention over configuration” prensibi sayesinde, birçok ayar ve yapılandırma önceden belirlenmiştir. Bu, geliştiricilerin tekrar eden görevlerle uğraşmak yerine doğrudan iş mantığına odaklanmasını sağlar. Hızlı prototipleme ve MVP (Minimum Viable Product) geliştirmek için idealdir.
* ORM (Object-Relational Mapping): CakePHP’nin güçlü ORM’si, veritabanı tablolarınızla nesneler aracılığıyla etkileşim kurmanızı sağlar. SQL sorguları yazmak yerine PHP nesneleriyle çalışarak kodunuzu daha okunabilir ve güvenli hale getirirsiniz.
* Güvenlik Özellikleri: CSRF koruması, SQL enjeksiyonu önleme, XSS filtreleme gibi yerleşik güvenlik özellikleri sayesinde uygulamanızın temel güvenlik ihtiyaçları karşılanır.
* Kapsamlı Kütüphaneler ve Bileşenler: Kimlik doğrulama, form doğrulama, e-posta gönderme, oturum yönetimi gibi birçok yaygın görev için hazır bileşenler ve yardımcılar sunar.
* Büyük ve Aktif Topluluk: Karşılaştığınız sorunlar için kolayca yardım bulabileceğiniz geniş bir geliştirici topluluğu ve iyi belgelenmiş bir yapıya sahiptir.

Neden Bir VPS?

* Tam Kontrol ve Root Erişimi: VPS, sunucunuzun işletim sistemi üzerinde tam root erişimi sağlar. Bu, istediğiniz yazılımı kurmanıza, özel yapılandırmalar yapmanıza ve sistem kaynaklarını dilediğiniz gibi yönetmenize olanak tanır.
* Esneklik ve Özelleştirme: Uygulamanızın özel gereksinimlerine göre sunucu ortamınızı (web sunucusu, PHP sürümü, veritabanı sistemi vb.) tamamen özelleştirebilirsiniz. Paylaşımlı hosting’in getirdiği kısıtlamalardan kurtulursunuz.
* Ölçeklenebilirlik: Uygulamanız büyüdükçe, VPS kaynaklarını (CPU, RAM, depolama) kolayca artırabilirsiniz. Bu, uygulamanızın performansını ve kullanılabilirliğini korumanıza yardımcı olur.
* İzole Ortam: VPS’iniz tamamen izole bir ortamda çalışır. Diğer kullanıcıların kaynak kullanımı veya güvenlik sorunları sizin uygulamanızı etkilemez. Bu, daha yüksek performans ve güvenlik anlamına gelir.
* Maliyet Etkinliği: Başlangıçta paylaşımlı hosting’e göre biraz daha pahalı görünse de, uzun vadede sağladığı esneklik, kontrol ve performans avantajları düşünüldüğünde, orta ve büyük ölçekli projeler için daha maliyet etkin bir çözümdür.
* Geliştirici Dostu: Geliştiriciler için, bir VPS üzerinde çalışmak, dağıtım süreçlerini öğrenmek, sunucu yönetimi becerilerini geliştirmek ve gerçek dünya ortamlarında deneyim kazanmak için harika bir fırsattır.

Ön Gereksinimler

Bu makaledeki adımları takip edebilmek için aşağıdaki ön gereksinimlere sahip olmanız önerilir:

* Temel Linux Komut Bilgisi: SSH üzerinden sunucuya bağlanma, dizinler arasında gezinme, dosya oluşturma/düzenleme ve temel paket yönetimi (apt) komutlarına aşinalık.
* SSH İstemcisi: Windows için PuTTY veya WSL (Windows Subsystem for Linux), macOS/Linux için yerleşik Terminal.
* Metin Düzenleyici: Yerel bilgisayarınızda bir kod düzenleyici (VS Code, Sublime Text vb.).
* Alan Adı (İsteğe Bağlı ama Önerilir): Uygulamanıza kolayca erişmek için bir alan adı kullanmak daha profesyonel bir deneyim sunar. Yoksa IP adresi ile de devam edebilirsiniz.
* Temel PHP ve MySQL Bilgisi: CakePHP’nin altında yatan teknolojilere dair temel bir anlayış.

VPS Hazırlığı ve Temel Kurulumlar

Bu bölümde, seçtiğiniz VPS sağlayıcısında bir sunucu oluşturmaktan, temel güvenlik ayarlarını yapmaya ve web sunucusu ile veritabanı sistemini kurmaya kadar olan adımları ele alacağız.

VPS Seçimi ve İlk Adımlar

Piyasada DigitalOcean, Vultr, Linode, AWS EC2, Google Cloud gibi birçok popüler VPS sağlayıcısı bulunmaktadır. Bu sağlayıcıların hepsi benzer hizmetler sunar; seçim size ve bütçenize kalmıştır. Bu makalede, yaygın olarak kullanılan Ubuntu 22.04 LTS işletim sistemini temel alacağız.

1. VPS Oluşturma: Seçtiğiniz sağlayıcının kontrol panelinden yeni bir VPS (veya “Droplet”, “Instance”) oluşturun. İşletim sistemi olarak Ubuntu 22.04 LTS‘i seçin. CPU, RAM ve depolama alanı ihtiyaçlarınıza göre belirleyin; başlangıç için 1 CPU, 1GB RAM ve 25GB depolama çoğu küçük uygulama için yeterli olacaktır.
2. SSH ile Bağlantı: VPS’iniz oluşturulduktan sonra, sağlayıcınız size sunucunun IP adresini ve root parolasını (veya SSH anahtarını) sağlayacaktır. SSH istemcinizi kullanarak sunucuya bağlanın:

ssh root@SUNUCU_IP_ADRESINIZ

İlk bağlantıda parolanızı girmeniz istenecektir.

Temel Güvenlik Ayarları

Sunucunuzu güvenli hale getirmek, herhangi bir web uygulamasını yayınlamadan önce atılması gereken en önemli adımlardan biridir.

1. Yeni Bir sudo Kullanıcısı Oluşturma: root kullanıcısı ile sürekli çalışmak risklidir. Yeni bir kullanıcı oluşturup ona sudo yetkisi verelim:

adduser kullanici_adiniz
    usermod -aG sudo kullanici_adiniz

Şimdi bu yeni kullanıcı ile giriş yapabilir ve sudo komutunu kullanarak root yetkisi gerektiren işlemleri gerçekleştirebilirsiniz. exit komutu ile root oturumundan çıkın ve yeni kullanıcı ile tekrar bağlanın:

ssh kullanici_adiniz@SUNUCU_IP_ADRESINIZ

2. SSH Anahtar Tabanlı Kimlik Doğrulama (Önerilir): Parola ile giriş yerine SSH anahtarları kullanmak çok daha güvenlidir.
* Yerel makinenizde bir SSH anahtar çifti oluşturun (eğer yoksa): ssh-keygen -t rsa -b 4096
* Genel anahtarınızı (~/.ssh/id_rsa.pub) sunucunuza kopyalayın:

ssh-copy-id kullanici_adiniz@SUNUCU_IP_ADRESINIZ

* Sunucuda SSH yapılandırma dosyasını düzenleyin (/etc/ssh/sshd_config) ve parola ile girişi devre dışı bırakın:

sudo nano /etc/ssh/sshd_config

PasswordAuthentication yes satırını bulun ve PasswordAuthentication no olarak değiştirin. Ayrıca PermitRootLogin yes satırını PermitRootLogin no olarak değiştirerek root kullanıcısının doğrudan SSH ile bağlanmasını engelleyin.
* SSH servisini yeniden başlatın: sudo systemctl restart sshd
* Yeni bir terminalden anahtarınızla bağlanmayı deneyin. Başarılı olursa, eski terminal oturumunu kapatabilirsiniz.
3. Güvenlik Duvarı (UFW) Kurulumu: UFW (Uncomplicated Firewall), Ubuntu’da güvenlik duvarını yönetmeyi kolaylaştırır.

sudo apt update
    sudo apt install ufw
    sudo ufw allow OpenSSH         # SSH bağlantısına izin ver
    sudo ufw allow 'Nginx HTTP'    # Nginx HTTP (80) portuna izin ver (Nginx kurduktan sonra)
    # sudo ufw allow 'Nginx HTTPS' # Nginx HTTPS (443) portuna izin ver (SSL kurduktan sonra)
    sudo ufw enable                # Güvenlik duvarını etkinleştir
    sudo ufw status                # Durumu kontrol et

Web Sunucusu, PHP ve Veritabanı Kurulumu (LEMP Stack)

Bu makalede, popüler ve performanslı bir web yığını olan LEMP (Linux, Nginx, MySQL/MariaDB, PHP) stack’ini kullanacağız.

1. Nginx Kurulumu:

sudo apt update
    sudo apt install nginx
    sudo systemctl enable nginx
    sudo systemctl start nginx

Tarayıcınızdan sunucunuzun IP adresine gittiğinizde “Welcome to Nginx!” sayfasını görmelisiniz.
2. MySQL/MariaDB Kurulumu: MariaDB, MySQL’in topluluk tarafından geliştirilen bir fork’udur ve tamamen uyumludur.

sudo apt install mariadb-server mariadb-client
    sudo systemctl enable mariadb
    sudo systemctl start mariadb

Güvenli kurulum betiğini çalıştırın:

sudo mysql_secure_installation

Bu betik sizden root parolası belirlemenizi, anonim kullanıcıları kaldırmanızı, root’un uzaktan girişini engellemenizi ve test veritabanını kaldırmanızı isteyecektir. Güvenliği artırmak için tüm sorulara Y (Yes) ile yanıt vermeniz önerilir.
3. PHP ve PHP-FPM Kurulumu: CakePHP bir PHP framework’ü olduğu için PHP’ye ihtiyacımız var. Nginx ile birlikte PHP-FPM (FastCGI Process Manager) kullanacağız.

sudo apt install php-fpm php-mysql php-cli php-mbstring php-xml php-zip php-gd php-curl
    sudo systemctl enable php8.1-fpm # Ubuntu 22.04 varsayılanı PHP 8.1'dir
    sudo systemctl start php8.1-fpm

Gerekirse php.ini dosyasında bazı ayarları düzenleyebilirsiniz. Özellikle upload_max_filesize ve post_max_size gibi değerleri ihtiyacınıza göre artırabilirsiniz.

sudo nano /etc/php/8.1/fpm/php.ini

Değişiklik yaptıktan sonra PHP-FPM’i yeniden başlatın: sudo systemctl restart php8.1-fpm.

Nginx Konfigürasyonu

Şimdi CakePHP projemizi barındıracak bir Nginx sanal host (server block) oluşturalım.

1. Site Dizini Oluşturma: CakePHP projemizi barındırmak için bir dizin oluşturalım. alanadiniz.com yerine kendi alan adınızı veya projenizin adını kullanın.

sudo mkdir -p /var/www/alanadiniz.com/public_html
    sudo chown -R $USER:$USER /var/www/alanadiniz.com/public_html
    sudo chmod -R 755 /var/www/alanadiniz.com

2. Nginx Server Block Oluşturma:

sudo nano /etc/nginx/sites-available/alanadiniz.com

Aşağıdaki içeriği yapıştırın ve alanadiniz.com kısımlarını kendi alan adınızla değiştirin:

server {
        listen 80;
        server_name alanadiniz.com www.alanadiniz.com; # Alan adınızı buraya yazın

        root /var/www/alanadiniz.com/public_html/webroot; # CakePHP webroot dizini

        index index.php index.html index.htm;

        charset utf-8;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP sürümünüze göre kontrol edin
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        location ~ /\.ht {
            deny all;
        }

        # Cache static files
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
            expires 5d;
        }
    }

3. Server Block’u Etkinleştirme: Oluşturduğunuz yapılandırma dosyasını sites-enabled dizinine sembolik link ile bağlayın:

sudo ln -s /etc/nginx/sites-available/alanadiniz.com /etc/nginx/sites-enabled/

4. Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma:

sudo nginx -t
    sudo systemctl restart nginx

nginx -t komutu yapılandırma dosyanızda hata olup olmadığını kontrol eder. Eğer “test is successful” mesajını görürseniz, Nginx’i yeniden başlatabilirsiniz.

Composer Kurulumu

Composer, PHP için bir bağımlılık yöneticisidir. CakePHP gibi modern PHP framework’leri, bağımlılıklarını yönetmek için Composer’ı kullanır.

1. Composer’ı İndirme ve Kurma:

cd ~
    curl -sS https://getcomposer.org/installer -o composer-setup.php
    sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
    rm composer-setup.php

Bu komutlar Composer’ı indirir, /usr/local/bin dizinine composer adıyla kurar ve indirdiğimiz kurulum dosyasını siler. Artık composer komutunu global olarak kullanabilirsiniz.
2. Composer’ın Çalıştığını Doğrulama:

composer --version

Composer’ın sürüm numarasını görmelisiniz.

CakePHP Projesi Oluşturma

Şimdi sıra geldi CakePHP projemizi oluşturmaya. Bunu, az önce Nginx için yapılandırdığımız dizinin içine yapacağız.

1. Proje Dizine Gitme:

cd /var/www/alanadiniz.com/public_html

2. Yeni Bir CakePHP Projesi Oluşturma:

composer create-project --prefer-dist cakephp/app:^4.0 .

Bu komut, mevcut dizine (.) CakePHP 4.x sürümünün en son stabil versiyonunu kuracaktır. Kurulum biraz zaman alabilir.
3. Dizin İzinlerini Ayarlama: CakePHP’nin tmp ve logs dizinlerine yazma izni olması gerekir. Nginx’in çalıştığı kullanıcıya (genellikle www-data) bu izinleri verelim.

sudo chown -R www-data:www-data /var/www/alanadiniz.com/public_html/tmp
    sudo chown -R www-data:www-data /var/www/alanadiniz.com/public_html/logs
    sudo chmod -R 775 /var/www/alanadiniz.com/public_html/tmp
    sudo chmod -R 775 /var/www/alanadiniz.com/public_html/logs

Ayrıca config dizini içinde app_local.php dosyasının da doğru izinlere sahip olduğundan emin olun.
4. Uygulamayı Test Etme: Tarayıcınızdan http://alanadiniz.com adresine gittiğinizde CakePHP’nin varsayılan hoş geldiniz sayfasını görmelisiniz. Eğer bir hata ile karşılaşırsanız (örneğin izin hatası), yukarıdaki izin adımlarını kontrol edin. Sayfanın altında “Database is not connected” gibi bir uyarı görmeniz normaldir, çünkü henüz veritabanı bağlantısını yapılandırmadık.

CakePHP Proje Yapısı (Kısa Bakış)

CakePHP projesini kurduktan sonra, dizin yapısına kısaca göz atalım:

* bin/: CakePHP komut satırı araçlarını içerir (örneğin bin/cake).
* config/: Uygulamanın yapılandırma dosyalarını barındırır (veritabanı, rota tanımları vb.). Özellikle app.php ve app_local.php önemlidir.
* plugins/: Uygulamanıza eklediğiniz eklentiler burada bulunur.
* src/: Uygulamanızın ana kodunu içerir. Model, View, Controller dosyaları buradadır.
* src/Controller/: Kontrolcü sınıfları.
* src/Model/: Model sınıfları (tablo ve varlık sınıfları).
* src/View/: Görünüm sınıfları (artık çok kullanılmaz, doğrudan şablonlar tercih edilir).
* templates/: Uygulamanızın görünüm şablonları (.php dosyaları) burada bulunur.
* tmp/: CakePHP tarafından geçici dosyaların (cache, oturumlar) saklandığı dizin. Yazma izinleri önemlidir.
* logs/: Uygulama logları burada tutulur. Yazma izinleri önemlidir.
* vendor/: Composer tarafından yönetilen tüm üçüncü taraf kütüphaneler burada bulunur.
* webroot/: Uygulamanızın genel erişime açık olan tek dizinidir. Tüm statik dosyalar (CSS, JS, resimler) ve index.php buradadır. Nginx yapılandırmamızda root dizinini buraya işaret etmiştik.

Veritabanı Yapılandırması

CakePHP’nin veritabanı ile etkileşim kurabilmesi için bağlantı bilgilerini yapılandırmamız gerekiyor.

MySQL/MariaDB’de Veritabanı Oluşturma

Öncelikle sunucunuzda CakePHP uygulamamız için bir veritabanı ve kullanıcı oluşturalım.

1. MySQL/MariaDB Konsoluna Giriş:

sudo mysql -u root -p

mysql_secure_installation sırasında belirlediğiniz root parolasını girin.
2. Veritabanı ve Kullanıcı Oluşturma:

CREATE DATABASE my_cake_app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'cake_user'@'localhost' IDENTIFIED BY 'GUCLU_PAROLA';
    GRANT ALL PRIVILEGES ON my_cake_app_db.* TO 'cake_user'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

* my_cake_app_db: Veritabanınızın adı.
* cake_user: Veritabanı kullanıcınızın adı.
* GUCLU_PAROLA: Bu kullanıcı için güçlü bir parola belirleyin.

CakePHP’de Veritabanı Bağlantısı

CakePHP’nin veritabanı yapılandırması config/app.php dosyasında bulunur. Ancak, yerel ayarlara özel değişiklikleri config/app_local.php dosyasına yapmanız önerilir. Bu dosya, app.php‘deki varsayılanları geçersiz kılar ve versiyon kontrol sistemine (Git gibi) eklenmemesi gereken hassas bilgileri (veritabanı parolaları gibi) saklamak için idealdir.

1. app_local.php Dosyasını Düzenleme:

nano /var/www/alanadiniz.com/public_html/config/app_local.php

Datasources bölümünü bulun ve aşağıdaki gibi düzenleyin (kendi veritabanı bilgilerinizle değiştirin):

'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'cake_user', // Oluşturduğunuz kullanıcı adı
            'password' => 'GUCLU_PAROLA', // Oluşturduğunuz parola
            'database' => 'my_cake_app_db', // Oluşturduğunuz veritabanı adı
            'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,

            /
             * Set spatial database type to MySqlSpatial to enable spatial queries.
             *
             * Note: spatial queries are not supported on Sqlite.
             */
            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        ],

        // ... diğer bağlantılar (test, vb.)
    ],

Dosyayı kaydedin ve kapatın (Ctrl+X, Y, Enter).
2. Veritabanı Bağlantısını Kontrol Etme: Tarayıcınızdan tekrar CakePHP hoş geldiniz sayfasına gidin. Artık “Database is not connected” uyarısının kaybolduğunu görmelisiniz. Bu, CakePHP’nin veritabanına başarıyla bağlandığı anlamına gelir.

Basit Bir Uygulama Geliştirme (Görev Listesi Örneği – Listeleme Kısmı)

Şimdi CakePHP’nin MVC yapısını kullanarak basit bir “Görev Listesi” uygulamasının listeleme kısmını oluşturalım.

Veritabanı Tablosu Oluşturma

Uygulamamız için tasks adında bir tablo oluşturalım.

1. MySQL/MariaDB Konsoluna Giriş:

sudo mysql -u cake_user -p my_cake_app_db

cake_user için belirlediğiniz parolayı girin.
2. tasks Tablosunu Oluşturma:

CREATE TABLE tasks (
        id INT AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        description TEXT,
        status ENUM('pending', 'completed') DEFAULT 'pending',
        created DATETIME DEFAULT CURRENT_TIMESTAMP,
        modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );

    INSERT INTO tasks (title, description, status) VALUES
    ('CakePHP Kurulumu', 'VPS üzerinde CakePHP kurulumunu tamamla.', 'completed'),
    ('İlk Uygulamayı Geliştir', 'Görev listesi uygulamasını oluştur.', 'pending');

EXIT; ile konsoldan çıkın.

CakePHP Model (Table) Oluşturma

CakePHP’de her veritabanı tablosu için bir “Table” sınıfı bulunur. Bu sınıf, tabloyla etkileşimi yönetir.

1. Table Sınıfını Oluşturma: CakePHP’nin bake komutu ile bunu kolayca yapabiliriz:

cd /var/www/alanadiniz.com/public_html
    bin/cake bake model Tasks

Bu komut, src/Model/Table/TasksTable.php dosyasını oluşturacaktır.
src/Model/Table/TasksTable.php içeriği (varsayılan olarak şöyle olacaktır):

setTable('tasks');
            $this->setDisplayField('title');
            $this->setPrimaryKey('id');

            $this->addBehavior('Timestamp'); // created ve modified alanlarını otomatik yönetir
        }

        public function validationDefault(Validator $validator): Validator
        {
            $validator
                ->integer('id')
                ->allowEmptyString('id', null, 'create');

            $validator
                ->scalar('title')
                ->maxLength('title', 255)
                ->requirePresence('title', 'create')
                ->notEmptyString('title');

            $validator
                ->scalar('description')
                ->allowEmptyString('description');

            $validator
                ->scalar('status')
                ->requirePresence('status', 'create')
                ->notEmptyString('status');

            return $validator;
        }

        public function buildRules(RulesChecker $rules): RulesChecker
        {
            // Add rules here if needed
            return $rules;
        }
    }

initialize() metodu, tablonun adını, birincil anahtarını ve Timestamp davranışını (created ve modified alanlarını otomatik doldurmak için) ayarlar. validationDefault() ise veri doğrulama kurallarını içerir.

CakePHP Controller Oluşturma

Controller, kullanıcı isteklerini işler, model ile etkileşime girer ve görünümün hangi veriyi göstereceğini belirler.

1. Controller Sınıfını Oluşturma: Yine bake komutunu kullanabiliriz:

bin/cake bake controller Tasks

Bu komut src/Controller/TasksController.php dosyasını oluşturacaktır.
2. index() Aksiyonunu Düzenleme: TasksController.php dosyasını açın ve index() metodunu aşağıdaki gibi düzenleyin:
src/Controller/TasksController.php


         * Index method
         *
         * @return \Cake\Http\Response|null|void Renders view
         */
        public function index()
        {
            // TasksTable'a erişim
            $tasksTable = TableRegistry::getTableLocator()->get('Tasks');

            // Tüm görevleri veritabanından çekme
            $tasks = $tasksTable->find('all')->toArray();

            // Görevleri görünüm dosyasına gönderme
            $this->set(compact('tasks'));
        }
    }

Burada, TableRegistry::getTableLocator()->get('Tasks') ile TasksTable modelimize erişiyoruz. Ardından find('all') metodu ile tüm görevleri çekip $tasks değişkenine atıyoruz. Son olarak, set(compact('tasks')) ile bu veriyi görünüm dosyasına iletiyoruz.

CakePHP View Oluşturma

View, kullanıcının gördüğü HTML çıktısını üretir. Controller’dan gelen veriyi kullanarak dinamik içerik oluşturur.

1. View Dizini ve Dosyası Oluşturma: CakePHP, controller’ın adına göre otomatik olarak bir dizin ve aksiyonun adına göre bir dosya bekler.

mkdir -p /var/www/alanadiniz.com/public_html/templates/Tasks
    nano /var/www/alanadiniz.com/public_html/templates/Tasks/index.php

2. index.php İçeriği: Aşağıdaki HTML ve PHP kodunu yapıştırın:
templates/Tasks/index.php


     * @var \App\View\AppView $this
     * @var \App\Model\Entity\Task[]|\Cake\Collection\CollectionInterface $tasks
     */
    $this->assign('title', 'Görev Listesi');
    ?>
    

Paginator->sort('id') ?> Paginator->sort('title', __('Başlık')) ?> Paginator->sort('status', __('Durum')) ?> Paginator->sort('created', __('Oluşturulma')) ?>
Number->format($task->id) ?> title) ?> status) ?> created->format('Y-m-d H:i:s')) ?> Html->link(__('Görüntüle'), ['action' => 'view', $task->id]) ?>

Bu şablon, controller’dan gelen $tasks dizisini döngüye sokar ve her bir görevin ID’sini, başlığını, durumunu ve oluşturulma tarihini bir HTML tablosunda gösterir. h() fonksiyonu, XSS saldırılarını önlemek için metni HTML’den kaçırır. Number ve Html helper’ları CakePHP tarafından sağlanan kullanışlı araçlardır.

Uygulamayı Test Etme

Şimdi tarayıcınızı açın ve aşağıdaki adrese gidin:
http://alanadiniz.com/tasks

Eğer her şeyi doğru yapılandırdıysanız, veritabanına eklediğiniz görevlerin listelendiği basit bir sayfa görmelisiniz.

Olası sorunlar ve çözümleri:
* Sayfa bulunamadı (404): Nginx yapılandırmasını, özellikle root dizinini ve try_files satırını kontrol edin.
* Veritabanı bağlantı hatası: config/app_local.php dosyasındaki veritabanı bilgilerini ve MySQL/MariaDB kullanıcısının yetkilerini kontrol edin.
* İzin hatası: tmp ve logs dizinlerinin www-data kullanıcısı için yazma iznine sahip olduğundan emin olun.
* Boş sayfa: PHP-FPM’in çalıştığından ve Nginx yapılandırmasında PHP-FPM’e doğru şekilde yönlendirildiğinden emin olun. PHP hata günlüklerini kontrol edin (/var/log/nginx/error.log veya /var/log/php8.1-fpm.log).

Sonuç ve Bölüm 2’ye Hazırlık

Bu makalenin ilk bölümünde, küçük bir web uygulamasını CakePHP ile bir VPS üzerinde oluşturmanın temellerini attık. Bir VPS’i nasıl seçeceğimizi ve ilk güvenlik adımlarını nasıl atacağımızı öğrendik. Ardından, Nginx, PHP-FPM ve MariaDB gibi temel web sunucusu bileşenlerini kurduk ve yapılandırdık. Composer’ı yükleyerek CakePHP projemizi başlattık ve veritabanı bağlantımızı kurduk. Son olarak, CakePHP’nin MVC yapısını kullanarak basit bir görev listesi uygulamasının listeleme (index) görünümünü oluşturduk.

Artık CakePHP uygulamamız bir VPS üzerinde çalışır durumda ve veritabanından veri çekip gösterebiliyor. Bu, herhangi bir dinamik web uygulamasının temelini oluşturur.

Serinin bir sonraki bölümünde (Bölüm 2), bu temel üzerine inşa etmeye devam edeceğiz. CakePHP’nin formlarını, veri doğrulamasını ve CRUD (Create, Read, Update, Delete) işlemlerini kullanarak görev ekleme, düzenleme ve silme işlevlerini uygulamamıza ekleyeceğiz. Ayrıca, kullanıcı dostu mesajlar ve temel hata yönetimi gibi konulara da değinebiliriz. Bu sayede, tam işlevli ve etkileşimli bir web uygulamasına doğru önemli adımlar atmış olacağız.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.