Laravel Controller İşlemleri

Laravel Controller İşlemleri

Hepinize merhaba dostlarım 😊. Bu yazımda sizlere daha önce "MVC Nedir" başlıklı yazımın içerisinde (okumayan dostlarım buradan ulaşabilirler) değindiğim ve artık kullanım zamanı gelen, projelerimizde neredese olmazsa olmaz olan, neredeyse bel kemiği olan yapıdan yani "Controller" yapısından, bu yapının nasıl olşturulacağından ve pratik olarak controller oluşturma işleminden, Oluşturduğumuz route kısımları ile bunları nasıl ilişkilendireceğimizden bahsedeceğim 😊. Ama önce gelelim controller nedir bunu tekrardan pekiştirerek bu yapıyı tekrardan pekiştirelim derim 😊

Controller Nedir ?

Dostlarım controller nedir diye inceleyecek olursak bizim projemizde kullanıcının gördüğü kısım (view) ile veri tabanımız (model) arasında getir götür işlerini yapan, aksiyonları alan ve bu aksiyonlar sonucunda kullanıcıya verileri sunan, bazı zamanlarda (örneğin kullanıcı kayıt işlemleri olsun varsayalım) gelen verileri işleyen, veri tabanımıza kaydedilmesini vs işlemleri sağlayan, mvc çatısı altında geliştirilen frameworklerin olmazsa olmaz kullandıkları yapıdır. Şimdi sizin sabırsızlandığınızı aşırı derecede sezmeye başladım 😊. O halde sözü daha fazla uzatmadan hemen gelelim Laravel üzerinde controller nasıl oluşturuluyor gelin ona bakalım.

Controller Oluşturma ve Kullanma

Öncelikle laravel proje ortamını kuralım (kurma işlemini karıştıran dostlarım buradan ulaşabilirler). Daha sonrasında "app/Http/Controllers" dizini altında "ornekController.php" şeklinde bir dosya oluşturalım. Daha sonra gelelim bu dosyamızın içerisine

<?php

namespace App\Http\Controllers;                // dosyamızın bulunduğu klasör yolunu namespace üzerinde belirtiyoruz
use App\Http\Controllers\Controller;           // Buradan da bu dosyada kullanacağımız kütühananeleri use komutu ile belirtiyoruz. Bu kodda miras alacağımız controller dosyasını belirttik

class ornekController extends Controller    // burada hangi class ın özellikleri alındığını yani hangi class tan miras alındığını söylüyoruz
{
   
}

?>

şeklinde kodlarımızı yazdık. Pekiii burada aklınıza gelen bir soru var dostlarım seziyorum ben bunu 😊. Soru ise şu

Hocam 'use' komutu ile 'namespace' komutunu kullanmamız illa zorunlu mu ?

Cevabım evet olacaktır dostlarım 😊. Çünkü namespace ile dosyamızın bulunduğu klasör yolunu yazıyoruz ki bu çok gerekli de bir şey. Özellikle OOP mimarisinde sıklıkla kullanılan namespace komutunu kullanmadığımız taktirde dosyamızın bulunma işlemi gibi bir durum olmayacaktır. Bu kısımdan namespace komutunun ne kadar önemli olduğunu gördük. Diğer komutumuz olan "use" komutuna bakacak olursak bu da proje geliştirme sürecimizde bize fayda sağlayacaktır. Örneğin burada bizim oluşturduğumuz "ornekController" isimli dosyamızın içerisinde tanımladığımız class bir Controller sınıfı gibi davranacağı için Controller sınıfını baz aldık yani miras aldık ve bunu bizim class ımıza extends işlemini gerçekleştirdik. Artık namespace ve use komutunun ne kadar önemli olduğunu anladığımıza göre gelelim sizin aklınızdaki bir soru işaretine daha 😊

Peki hocam her projemizde böyle uzun uzun controller dosyamızı elle mi yazacağız ? Yok mu bir kısa yolu ?

dediğinizi seziyorum. Cevabım ise "Laravel geliştiricileri bunun için de bir çözüm bulmuş 😊". Bizim proje geliştirme sürecinde uzun uzun class yazmamız yerine bu işlemleri kolaylaştırmak içerisine bir artisan komutu geliştirmiş. Şimdi diyeceksiniz "Hocam sadede gel hadi göster 😊". Peki o halde hemen gösteriyorum 😊. Controller oluşturma komutumuz şu şekildedir

php artisan make:controller controller_ismi

şeklinde tek satırlık bir komutumuz var dostlarım. Şimdi ise gelelim bir controller oluşturalım. Artisan komutu ile bunu hızlıca oluşturacağımız için ismi "hizliController" olsun. Hemen gelip termina ekranımıza

php artisan make:controller hizliController

yazıp Enter tuşuna basalım. Ekranımıza

Controller created successfully.

şeklinde bir çıktı gelecektir ve Controller dosyamız rahatlıkla oluşturulmuştur 😊. Daha sonra gelip "app/Http/Controllers" klasörü altına bakacak olursak gerçekten de hizliController.php dosyamız oluşturulmuştur 💯. Gelelim bu Controller dosyamızın içeriğine bir göz atalım

<?php

namespace App\Http\Controllers;    // controller dosyamız hangi klasör yolunda
use Illuminate\Http\Request;            // buradan da gelen giden istekleri projemizde kullanabilmek için bu kütüphaneyi otomatik olarak import etmiş dosyamıza. Şu anlık kullanmayacağız :)

class hizliController extends Controller
{
    
}

?>

şeklinde içeriği bile bizim için hazırlamış ve bize "Dostum al her şeyi hazırladım rahatlıkla çalışmaya başlayabilirsin 😊" dercesine her şeyi ayarlamış 😊. Şimdi gelelim bu controller larımıza nasıl istek atıp (GET veya POST verisi haricinde url den istek atmayı kastettim dostlarım her şeye yavaş yavaş geleceğiiz sakin olun 😊) bunlara erişebiliriz gelelim onları ayarlayalım. Öncelikle oluşturduğumuz hizliController.php ismindeki Controller dosyamızın içerisine 3 adet bir method yazalım. Bunlar bizim sözde örnek sayfalarımız olsun. Amacım istekleri nasıl yakalayacağımızdan bahsetmek 😊. Şimdi açalım hizliController.php dosyamızı ve

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class hizliController extends Controller
{
    public function index(){
        echo "Burası Index Sayfamız";
    }
    
    public function hakkimda(){
        echo "Burası Hakkımda Sayfamız";
    }
    
    public  function iletisim(){
        echo "Burası İletişim Sayfamız";
    }
}

?>

şeklinde methodlarımızı oluşturduk. Şimdi sizin aklınıza gelen soru şu oldu ben seziyorum 😊

Hocam buraya kadar anladık 10 numara anlattınız. Şimdi biz bu methodlar içerisindeki yazıları mesela hakkımda sayfasına gittiğimizde ekrana 'Burası Hakkımda Sayfamız' yazısını nasıl bastırabilirim ?

dostlarım çok heyecanlısınız az sakin olun anlatcam 😊. Bu kadar heyecan fazla biraz etkileyebilir. Ben sözü uzatmadan anlatayım 😅. 

Bu controller dosyamızda methodlarımızı oluşturduktan sonra "routes/web.php" adresine gidip bu 3 parametreye gidecek olan isteklerimizi route olarak belirtmemiz lazım. Nasıl mı diye soracak olursanız hemen göstereyim

<?php

use Illuminate\Support\Facades\Route;

Route::get('/','hizliController@index');     // kök isteğimiz yani 127.0.0.1 çalıştığında burası çağrılacak
Route::get('/hakkimda','hizliController@hakkimda');    // hakkimda isteğimiz yani 127.0.0.1/hakkimda çalıştığında burası çağrılacak
Route::get('/iletisim','hizliController@iletisim');     // iletisim isteğimiz yani  127.0.0.1/iletisim  çalıştığında burası çağrılacak

?>

şeklinde komutlarımızı yazdık ve bu isteklerin hepsinin get olarak gideceğini ayarladık. Bu kısımda aklınıza takılan yerler varsa "Laravel Route İşlemleri" yazıma buradan ulaşabilirsiniz. 

Şimdi aklınıza bu konu üzerinde takılan yeri ben yine sezdim ve bu soru da şu

Hocam hizliController@hakkimda yazdık ya bu hizliController içerisindeki hakkimda methoduna git demek mi oluyor ?

Bunu cevabını sevinerek söylüyorum "Eveeet 😊". Olayın mantığını bakar bakmaz anlamışsınız çok mutlu oldum inanın 😊. Şimdi gelelim bu istekleri çağırma işlemimize yalnız bu istekleri çalıştırmadan önce terminal ekranımıza gelip

php artisan serve

komutumuzu yazıp local server imizi başlatalım. Daha sonra

127.0.0.1
127.0.0.1/hakkimda
127.0.0.1/iletisim

-----------------------------
Ekran Çıktıları Sırasıyla

Burası Index Sayfamız
Burası Hakkımda Sayfamız
Burası İletişim Sayfamız

şeklinde olacaktır. Bütün işlemler bu kadar basit dostlarım 😊. Şimdi gelelim controller üzerinde parametre işlemlerine

Controller Üzerinde Parametre İşlemleri

Evet dostlarım 😊. Bu kısımda ise özellikle projelerimizde hemen hemen her controller üzerinde sıklıkla gördüğümüz ve kullandığımız, veri tabanı işlemlerinde olmazsa olmaz bir yere sahip olan parametre kullanımını controller üzerinde göstereceğim. Örnek vermek gerekirse dostlarım bir e-ticaret sayfası yaptınız varsayalım ve bu e-ticaret sayfasında ürün detay sayfası olsun. Bunu seo-url şeklinde alıp detayını getirmeniz durumları olabiliyor. İşte bu aşamada dostlarım controller üzerinde parametre kullanma işlemi devreye giriyor ve bu ürün detay sayfası işleminde bize çok fayda sağlıyor 😊. Sözü daha fazla uzatmadan hemen gelelmim kodlamaya. Daha önceden oluşturduğumuz hizliController sayfamızda bir method tanımlayalım ve bunun ismi karsila olsun. Kullanıcıdan isim ve soyisim parrametreleri alsın ve parametreler geldiği doğrultuda kodlarımız çalışsın. Hemen gelip kodumuzu yazalım

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class hizliController extends Controller
{
    public function karsila($name,$surname){
        echo "Hoşgeldin: ".$name." ".$surname;
    }
}

?>

şeklinde kodumuzu yazdık. Buraya gelen $name ve $surname parametreleri geldiği taktirde kodumuz çalışacaktır. Lakin bu isteğimizi karşılayacak kodumuzu da "routes/web.php" içerisine yazalım. Hemen gelelim web.php dosyası içerisine ve

<?php

use Illuminate\Support\Facades\Route;

Route::get('/karsila/{name}/{surname}','hizliController@karsila');

?>

şeklinde kodumuzu yazalım. Daha sonrasında ise proje kök klasörümüze gelip terminalimizi açalım ve 

php artisan serve

komutumuzu yazalım. Local serverimizi de başlattık ve artık parametre isteğimizi browser üzerinden gönderelim. Bunun için browser sayfamıza gelip

http://127.0.0.1:8000/karsila/Mfsoftware/Blog

şeklinde isteğimizi gönderdik. Karşımıza gelen sonuç ise dostlarım

Hoşgeldin: Mfsoftware Blog

şeklinde olacaktır. Kodumuzu sorunsuz şekilde çalıştı 💯. Şimdi sizin aklınızda olan bir soruya daha gelelim 😊.

Hocam peki bu parametreleri göndermezsek çalışır mı çalışmaz mı ?

Öğrenme adı altında bu sorular güzel sorular dostlarım 😊. Gelin bunu birlikte test edelim. Parametreleri göndermeden direkt olarak

http://127.0.0.1:8000/karsila

şeklinde isteğimizi atalım. Ekranımıza çıkacak sonuç

 404 | Not Found şeklindedir. Bunun sebebi ise dostlarım bizim controller dosyamız üzerinde sade bir şekilde

http://127.0.0.1:8000/karsila

isteğinin olmaması ve zorunlu olarak parametre isteyen bir rotamızın olmasından dolayıdır. Pekiiii bu hatanın önüne nasıl geçebiliriz gelin onu inceleyelim. Öncelikle "routes/web.php" dosyamızı açalım ve yazmış olduğumuz rotamızı

<?php

use Illuminate\Support\Facades\Route;

Route::get('/karsila/{name?}/{surname?}','hizliController@karsila');

?>

şeklinde parametrelerimizin sonuna şeklinde soru işareti koyarak bu parametelerimizin zorunlu olmadığını söylüyoruz. İşlemimiz bitti mi diye soracak olursanız bitmedi bir işlemimiz kaldı sadece. Oluşturduğumuz hizliController dosyamıza gelip oluşturduğumuz karsila methoduna gelelim ve

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class hizliController extends Controller
{
    public function karsila($name=null,$surname=null){
        echo "Hoşgeldin: ".$name." ".$surname;
    }
}

?>

olarak $name ve $surname parametrelerinin varsayılan değerlerini null yapalım. Çünkü zorunlu olarak bir parametre istmiyoruz ve parametre gelmediğinde de değerlerimizin default olarak null olmasını istiyoruz. Daha sonra gelelim browser ımıza gelelim ve

http://127.0.0.1:8000/karsila

şeklinde tekrar istekte bulunalım. Bu sefer ekranımıza

Hoşgeldin:

şeklinde ekranımıza bir çıktı veriliyor. Yani işlemler başarıyla sonuçlandı 💯. Controller üzerinde parametre gönderme işlemlerimiz bu kadar basit dostlarım 😊. Bu kısma kadar sorun yoksa Controller işlemlerinde kullanılan ve neredeyse olmazsa olmaz dedirten bir konumuza 😊

Controller Üzerinde Namespace İşlemleri

Veee geldik controller işlemlerinde olmazsa olmaz derecede önem arz eden ve kullanmamızın gerektiği ve öğrenmemizin bize ileriki zamanlarda büyük katkı sağlayacağı işlemlerden birisi olan namespace işlemlerine 😊. Yukarıdaki işlemlerde de anlattığım gibi bizim controller dosyamızın hangi klasör altında olduğunu belirten namespace işlemlerini yeri geldiğinde ayarlama durumları ile karşılaşabiliyoruz. Örnek vermek gerekirse bir admin kısmı için controller dosyalarını tutacağımız klasörümüz olsun, bir de ziyayretçiler için controller dosyalarını tutacağımız klasörümüz olsun. Bu klasörler tabi birbirinden farklı olduğundan içerisinde tanımlanan controller dosyalarımızın namespace değerleri de haliyle farklı olacaktır. Çünkü admin klasörü içerisinde tanımlanmış olan controller dosyalarının namespace kısmında admin yazarken ziyaretçiler klasörü içerisinde tanımlanmış olan controller dosyalarında ziyaretçiler yazacaktır 😊. Namespace nin mantığını anladığımıza göre dostlarım gelin sizlerle beraber "app/Http/Controllers" klasör yolu altında iki adet klasör oluşturalım. Birincisi "Admin" olsun ve diğeri de "Ziyaretci" olsun 😊. Klasörlerimizi oluşturduktan sonra gelelim terminalimize. Aşağıdaki komutlardan öncelikle

php artisan make:controller Admin/adminController

şeklinde komutumuzu verelim. Daha sonra ise

php artisan make:controller Ziyaretci/ziyaretciController

şeklinde komutumu yazalım. İkisinin sonucunda da bize

Controller created successfully.

şeklinde çıktı verecektir dostlarım 😊. Şimdi gelelim adminController dosyasını açalım ve

<?php

namespace App\Http\Controllers\Admin;   // namespace kısmında 'Admin' klasörü altına ulaşacağımızı söyledik

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class adminController extends Controller
{
    //
}

?>

şeklinde gördüğümüz üzere namespace kısmında adminController dosyamızın Admin klasörümüz altında olduğu belirtiliyor. Bir de ziyaretciController dosyamıza bakalım durum gerçekten öyle mi diye

<?php

namespace App\Http\Controllers\Ziyaretci;   // namespace kısmında 'Ziyaretci' klasörü altına ulaşacağımızı söyledik

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ziyaretciController extends Controller
{
    //
}

?>

ve gördüğümüz gibi iki controller dosyamız da bizim için sorunsuz şekilde ayarlanmış dostlarım 😊. Şimdi gelelim her iki controller dosyamıza da bir method tanımlayalım. Öncelikle adminController dosyamızı açalım ve

<?php

namespace App\Http\Controllers\Admin; 

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class adminController extends Controller
{
    public function index(){
        echo "Burası Admin Sayfası";
    }
}

?>

şeklinde düzenlememizi yapalım 😊. Daha sonra gelelim ziyaretciController dosyamıza gelelim ve

<?php

namespace App\Http\Controllers\Ziyaretci; 

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ziyaretciController extends Controller
{
    public function index(){
        echo "Burası Ziyaretçi Sayfası";
    }
}

?>

şeklinde burada da ayarlamamızı yapalım. Şimdiiii bu controller lara ve methodlara erişim için route klasörü altındaki web.php dosyasında ayarlamalar yapmamız lazım. Gelelim web.php dosyasına ve

<?php

use Illuminate\Support\Facades\Route;

// 127.0.0.1/admin yazınca çalışacak
Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){
    Route::get('','adminController@index');
});

// 127.0.0.1/ziyaretci yazınca çalışacak
Route::group(['prefix'=>'ziyaretci','namespace'=>'Ziyaretci'],function (){
    Route::get('','ziyaretciController@index');
});

şeklinde kodlarımızı yazdık. Bu kısımda karşınıza çıkan iki adet yabancı terim vardır dostlarım bunları anlıyorum 😊. Mantığını anladığınızda her şeyin çok basit olduğunu göreceksiniz. Gözünüzde hiç büyütmeyin bunları 😊. Gelin hep beraber bunlar neymiş bir inceleyelin

  1. Prefix: Dostlarım prefix bizim browser sayfamız üzerinden attığımız istekler olarak geçer. Önceki örneklerimizde mesela 127.0.0.1/hakkimda yazdığımızda bu istekteki hakkimda kısmı bir prefix olarak geçer 😊. Çok büyütülecek bir şey yok 😊
  2. Namespace: Namespace de yukarıda konumuzun başında değindiğimiz gibi bu route altında çalışacak olan controller dosyaları hangi klasör altından çağrılacak şeklinde komut verir. Cidden burada da zor bir şey yok dostlarım 😊.

şeklinde tanımladık. Geldik artık kodlarımızın çalıştığını veya çalışmadığını test etmeye. Öncelikle laravel ile uğraştığımız için local server imizi başlatalım. Proje kök klasörümüze gelip terminalimizi açalım ve

php artisan serve

komutumuzu yazalım 😊. Daha sonrasında ise browser sayfamızı açalım ve

http://127.0.0.1:8000/admin

şeklinde istek atalım. Ekranımıza çıktı olarak

Burası Admin Sayfası

yazısı bastırılacaktır 😊. Buraya kadar normal 😊. Şimdi gelelim diğer bir isteğimizi atalım. Tekrar gelelim browser sayfamıza ve

http://127.0.0.1:8000/ziyaretci

şeklinde isteğimizi gönderelim. Karşımıza gelecek olan çıktı ise

Burası Ziyaretçi Sayfası

şeklinde olacaktır 😊. Kodlarımız başarıyla çalışıyor 💯. 

 

Eveeet dostlarım 😊. Bu yazımda sizlere laravel framework'ü üzerinde controller nedir, nasıl oluşturulur, parametre kullanımı nasıldır ve namespace nedir nasıl tanımlanır vs konulardan dilim döndüğünce anlatmaya çalıştım 😊. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmışsam benimle iletişime geçmekten çekinmeyin 😊. Konu başlarda biraz karmaşık ve zor gelebilir anlıyorum ben de laravele ilk geçişte bu konuda baya zorlanmıştım. Bu durumda sizlerden yapmanızı istediğim şey her yazımda da dediğiim gibi "İstikrarlı ve Azimli olmalı, bolca pratik yapmalısınız 😊". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizin için kaçınılmaz olacaktır 😊

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıPHP Dosya İşlemleri -2-
Sonraki YazıJavascript Class Kullanımı
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz