Bir PHP çatısı (framework) olan Laravel ile uygulama geliştirirken basit ajax formlarına ihtiyaç duyabiliyoruz. Konuyu anlatmak için bu yazıya başladığımda en iyi anlatma şeklinin bir örnek (mini proje) geliştirmek olduğunu düşündüm ve bu sebeple Laravel Ajax Contact Form (iletişim formu) hazırladım. Aslında daha önce Laravel ile eposta göndermeyi anlatmıştım ancak bu sefer ki ajax da içeren daha derli toplu bir mini proje oldu ;)
Laravel ile ajax kullanımını anlatan iletişim fomuna github sayfasından ulaşabilirsiniz. Formu oradan indirip inceleyebilirsiniz fakat ondan önce Laravel ile ajax kullanımında dikkatinizi çekmek istediğim iki konu var.
1. Ajax ile Laravel CSRF Token Kullanımı
Laravel cross-site request forgery (CSRF) saldırılarını önlemek için CSRF token üretmektedir. Tipik olarak bu bir değişkendir ve her form gönderilişinde bu değişkenin de gönderilmesi gerekir. Ajax formlarında bunu göndermek için şöyle bir yol izleyebilirsiniz.
Öncelikle formun içinde şu şekilde bir hidden input tanımlamalıyız.
Ardından ajax javascript kodumuzun değişken kısmına bu değişkeni eklemeliyiz. Böylece formumuz ile birlikte token değerini ajax metodu ile göndermiş oluyoruz.
... $.ajax({ type: 'POST', url: $form.attr('action'), data: { name: $form.find('#name').val(), email: $form.find('#email').val(), _token: $form.find('#_token').val(), message: $form.find('#message').val() } ...
2. Laravel Controller Ajax Fonksiyonu
Ajax ile formu gönderdiğimizde bir Laravel’de yazmış olduğumuz bir PHP fonksiyonu bunu karşılayıp karşılığında bize bir değer döndürecektir. Normal şartlarda laravel controller içindeki fonksiyonlar birer view dosyasını işaret ederler. Ajax ile gönderilen form ise json olarak cevap vermeli. İletişim formu fonksiyonumuzun son kısmına bakarsanız nasıl bir cevap vermemiz gerektiğini görebilirsiniz.
... if(count(Mail::failures()) > 0){ $status = 'error'; } else { $status = 'success'; } return response()->json(['response' => $status]); ...
Mail göndermek için önce bir mail driver oluşturmanız gerektiğini unutmayın. Gmail’i mail driver olarak nasıl kullanabileceğinizi de şurada anlatmıştım.
Ayrıca örnek projede jQuery validation eklentisini kullandığım için aşağıdaki örnekte olduğu gibi kendinize özgü doğrulama yöntemleri oluşturabilirsiniz.
$("#contactForm").validate({ rules: { name: "required", email: { required: true, email: true } } });
Uygulamanın geri kalanını github‘dan inceleyip dilediğiniz gibi kullanabilirsiniz. Sevgiler saygılar.