Laravel’de Controller nedir ve nasıl oluşturulur?

Laravel‘de isterseniz tüm komutlarınızı web.php yani Route dosyanıza da yazabilirsiniz ancak bu efektif bir yöntem olmayacaktır. Aynı zamanda bu şekilde yapılması MVC yapısına da aykırıdır.
Laravel‘de işlemlerinizi Controller ismi verilen yapılarda gerçekleştirmelisiniz.
Controller dosyaları gerçekte birer text dosyalarıdır ve bir Controller dosyasının yapısı yaklaşık olarak şu şekildedir.

<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{

public function show()
{
   return view('profil',['isim='YAZILIMCI.ORG']);
}

}

Gördüğünüz gibi bu Controller‘ın içerisinde show isminde bir fonksiyon bulunuyor. Bu fonksiyon profil isimli View‘i çağırıyor ve ona isim şeklinde bir parametre aktarıyor.

Controller dosyaları Laravel’de app/Http/Controllers klasöründe bulunur. İsterseniz bu dosyayı kendiniz de oluşturabilirsiniz ancak Laravel bunun için bir Artisan komutuna sahip. Dolayısı ile bu komutu kullanarak Controller’ınızı oluşturabilirsiniz. Haydi UserController isminde bir Controller oluşturalım.

php artisan make:controller UserController

Bildiğiniz üzere Laravel’de Controller yapısı “genellikle” şunlar için kullanılıyor.

Veritabanındaki kayıtları listelemek (index)
Veritabanındaki bir kayıtı göstermek (show)
Yeni kayıt oluşturma formunu göstermek (create)
Doldurulan yeni kayıt formunu veritabanına saklamak (store)
Kayıt düzenleme formunu göstermek (edit)
Doldurulan kayıt düzenleme formunu veritabanına saklamak (update)
Bir kayıtı silmek (destroy)

İşte bu gereksinimlerden dolayı Laravel bizlere Controller oluştururken bu metodları otomatik oluşturma seçeneği de sunuyor. Bu sayede index, show, create, store, edit, update, destroy metodları oluşturulan Controller’ın içinde otomatik olarak eklenmiş halde geliyor. Bunu yapmak için Controller oluşturma kodunun yanına –resource kelimesini eklemek yeterli.

php artisan make:controller UserController --resource

Bu komut çalıştırıldıktan sonra oluşan UserController dosyamızın içeriği tam da şu şekilde olacaktır.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Bu dosyanın içerisinde index, create, show, edit, update, store, destroy gibi metodların otomatik olarak oluşturulduğuna dikkat ettiniz değil mi?

Artık kodlarınızı bu metodlar (fonksiyonlar) içerisine yazabilirsiniz.

index metodunda tüm kayıtları listeleyeceğiniz view’i gösterebilirsiniz.
create metodunda yeni kayıt oluşturma formunun bulunduğu view’i gösterebilirsiniz.
store metodunda yeni kayıt formundan $request ile gelen bilgileri veritabanına kayıt edebilirsiniz.
show metodunda gelen id değerini kullanarak ilgili kayıtı çekebilir ve kayıt gösteren view’inizi gösterebilirsiniz.
edit metodunda kayıt düzenleme formunun bulunduğu view’i gösterebilirsiniz.
update metodunda kayıt düzenleme formundan $request ile gelen bilgileri veritabanına update yapabilirsiniz.
destroy metodu ile de id’si $request ile gelen kayıtı silebilirsiniz.

Peki bu şekilde resource olarak oluşturduğunuz Controller için Route tanımını nasıl yapmalısınız?
O daha da basit. web.php dosyanızda şu şekilde bir tanım yapabilirsiniz.

Route::resource('users', UserController::class);

Bu şekildeki tanımınız sonucunda artık şöyle URL’lere yanıt verilecektir.

/users adresine GET yapılırsa index metodu çalışır.
/users/create adresine GET yapılırsa create metodu çalışır.
/users/ adresine POST yapılırsa store metodu çalışır.
/users/{id} adresine GET yapılırsa show metodu çalışır.
/users/{id}/edit adresine GET yapılırsa edit metodu çalışır.
/users adresine PUT/PATCH yapılırsa update metodu çalışır.
/users{id} adresine DELETE yapılırsa destroy metodu çalışır.

Ayrıca bu Route’lar otomatik olarak isimlendirilmiş olacaktır.
Bu sayede örneğin create URL’sini örneğin View’ınızda elde etmek için

{{route('users.store')}}

komutunu kullanabilirsiniz.

Aynı şekilde Resource ile otomatik oluşturulan Users Route’unun diğer fonksiyonlar için isimleri şöyledir.

users.index
users.create
users.store
user.store
users.show
users.edit
users.update
users.destroy

 

Bir yanıt yazın

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