Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhabalar, acemilikte kafa karışıklığı çok oluyor, compact() ve with() methodları arasındaki farkı anlayamadım. Blade şablonuna veri gönderirken ikisiyle de gidiyor fark nedir ? Şimdiden teşekkürler.

    Temel de olsa konuların sayfada bulunmasını istedim,
    with() methodu Laravelde tanımlı bir methodmuş, vetitabanından alının verileri obje yapısında göndermeyi sağlıyorken,
    compact()methodu PHP tanımlı bir mthod olarak yine veritabanından alınan verileri dizi olarak göndermeyi sağlıyor.

    Kanımca with()daha kolayıma geldi.

    compact()ile obje de gidiyor. 🙁 bir fark bulamadım.

    MuratAydogan compact() bir PHP fonksiyonudur, Laravel ile ilgisi yok. Associative array dediğimiz anahtar ve değerden (key => value) oluşan dizilerde bazen şöyle bir durumla karşılaşırız:

    $black = 'Siyah';
    $red = 'Kırmızı';
    $blue = 'Mavi';
    
    $data = [
        'black' => $black,
        'red' => $red,
        'blue' => $blue,
    ];

    Gördüğünüz gibi $data dizisinin anahtar/eleman isimleri ile aldığı değişken değerler aynı isme sahip. Böyle durumda bu şekilde de yazılabilir:

    $black = 'Siyah';
    $red = 'Kırmızı';
    $blue = 'Mavi';
    
    $data = compact('black', 'red', 'blue');

    compact() bize burada değişken isimlerinden ve değerlerinden bir associative array oluşturur. İkisinde de aynı $data dizisini elde edersiniz;

    {
        "black": "Siyah",
        "red": "Kırmızı",
        "blue": "Mavi"
    }

    compact bu işe yarar. with() ise (View::with()) şablona veri göndermek için kullanılan bir Laravel yöntemi. Kullanım şekli ise:

    return view('users.index')->with('users', $users);
    
    // ya da
    
    return view('users.index')->with([
        'users' => $users,
        'title' => 'Users',
    ]);

    Bunun dışında şablona veri göndermenin bir yolu daha var o da view() yönteminin ikinci parametresi olarak veriyi dizi olarak vermek, ki bu en çok tercih ettiğimiz yoldur:

    return view('users.index', [
        'users' => $users,
    ]);

    Şimdi üstte compact kısmında anlattığımdan yola çıkarak şöyle yaptığınızı düşünürseniz

    return view('colors.index', [
        'black' => $black,
        'red' => $red,
        'blue' => $blue,
    ]);

    aslında şöyle de yapabilirsiniz demektir:

    return view('colors.index', compact('black', 'red', 'blue'));
    
     // ya da
    
    return view('colors.index')->with(compact('black', 'red', 'blue'));

    Aslında olay bu.