Laravel csrf token mismatch for ajax POST Request Hatası

Laravel framework kullanımında bildiğiniz üzere formlarda güvenlik açısından csrf token kullanmanız sizden istenmekte. Yalnız ajax yapısı kullanarak form post işlemlerinde de aynısını istediği için başlıkta yazan hatayı bizlere sunmakta. Bunun çözümü basit. Ajax post ile göndereceğimiz datanın içine csrf kodunu da gömdük mü tamamdır.

<code>data: {
        "_token": "{{ csrf_token() }}",
        "sizin bilgileriniz": sizin bilgileriniz
        }</code>

_token değeri ile bizim işimiz. Diğer bilgiler sizi bağlar. _token değerini de gönderdiğiniz takdirde formunu çalışacaktır.

Ben bunu yapmam derseniz sayfanızın header kısmına;

<code>&lt;meta name="csrf-token" content="{{ csrf_token() }}" /></code>

kodunu ekliyoruz. Sonra yine sayfanın herhangi bi yerine

<code>&lt;script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta&#91;name="csrf-token"]').attr('content')
    }
});
&lt;/script></code>

Ekliyoruz. Bundan sonra hangi ajax dosyasını çalıştırırsanız çalıştırın, o sayfadaki tüm ajax postlarına otomatik csrf token eklenmiş olacak.

Laravel Validator Hatalarını Gösterme (Validator Fails Response)

Bugün validator ile geri döndürmeyi anlatmaya çalışacağım hızlıca. İlk önce hedefimiz validator vasıtasıyla formdan gelen verileri hızlıca test edip varsa bunun hatasını kullanıcıya sunmak istiyoruz. Örneğin tc kimlik numarası diye textbox’ımız olsun. bunu 11 değilde 12 haneli doldurduklarında karşılarına çıkacak mesajı göstereceğiz.

Hemen hangi controllerda kullanacaksak onun fonksiyonuan gelip şunları yazıyoruz;

<code> $validator = Validator::make($request->all(), [
            'tc' => ['required','numeric'],
            'isim' => ['required','string', 'max:50'],
            'soyisim' => ['required','string', 'max:50'],
            'birlik' => ['required'],
            'tertip' => ['required'],
]);</code>

Gördüğünüz gibi tc adlı değerimiz gerekli ve numara olmak zorunda, isim değişkenimiz gerekli, string ve maksimum 50 karakter olmakta. (tcyi 11 haneli yazmamışım onu dert etmeyin onu siz ekleyin. Şimdi ise bunlarda bi hata varsa nereye gideceğini belirtiyoruz.

<code>if ($validator->fails()) {
          $errors = $validator->errors()->first();
          return view('uyeekle')->with('error',$errors);
        }</code>

hemen bir errors değişkeni içine validatorden gelen ilk hatayı atıyoruz ve bunu uyeekle.blade.php sayfasına error değişkeni adıyla yolluyoruz. Şimdi uyeekle.blade.php dosyasına gelip diyoruz ki sana error diye bir değişkenle gelinirse onu yaz. bunu da aşağıdaki kod vasıtasıyla yapıyoruz;

<code> @if(isset($error))
                &lt;div class='alert alert-danger alert-dismissible'>
                    &lt;h4>Sonuç Ekranı&lt;/h4>
                    &lt;p>{{$error}}&lt;/p>
                &lt;/div>
            @endif</code>

Artık kendi hata stilinize göre error değişkeninin başka yerde yazdırırsınız. Ama şunu unutmayın if ve p içinde yazan error mutlaka olmak zorunda.

Laravel Kurulumu #2

Bir önceki yazılarımda laravel kurulumu anlatmıştım. Bu sefer composer üzerinden hem indirip hem kurmayı göstereceğim. Zaten basit bir şey. Composer olayını önceden çözenler için boş ama çözmeyenler için çok güzel bilgi olduğunu düşünüyorum.

İlk önce composer indiriyoruz. sonra cmd veya phpstorm terminalinden aşağıdaki kodu yazıyoruz.

<code>composer create-project --prefer-dist laravel/laravel </code>

hepsi bu kadar. eğer bir alt klasördeki dizine kurmak istersek;

<code>composer create-project --prefer-dist laravel/laravel deneme</code>

Böyle de deneme klasörüne laravel kurmuş olduk.

Laravel Barkod Oluşturma

Bugün laravel eklentilerinden barkod oluşturma eklentisini anlatmaya çalışacağım. Kullanacağımız eklentinin adı Picqer, adresi ise buradaki linkte yatmaktadır.

Çok basit kullanışlı bir eklenti. Kurulumu için direk composer ekranına,

<code>composer require picqer/php-barcode-generator</code>

yazıyoruz. Kurulum tamamlandıktan sonra herhangi bir controller açıp, sayfanın en üstüne

<code>use Picqer;</code>

yazıyoruz. Sonra aynı controller’da oluşturduğumuz fonksiyonlardan birine;

<code>$generator = new Picqer\Barcode\BarcodeGeneratorHTML();
echo $generator->getBarcode('081231723897', $generator::TYPE_CODE_128);</code>

Hepsi bu kadar. Ama yok bana type_code_128 yetmez 39 olan lazım dersen onun da listesini aşağıya ekliyorum;

<code>TYPE_CODE_39
TYPE_CODE_39_CHECKSUM
TYPE_CODE_39E
TYPE_CODE_39E_CHECKSUM
TYPE_CODE_93
TYPE_STANDARD_2_5
TYPE_STANDARD_2_5_CHECKSUM
TYPE_INTERLEAVED_2_5
TYPE_INTERLEAVED_2_5_CHECKSUM
TYPE_CODE_128
TYPE_CODE_128_A
TYPE_CODE_128_B
TYPE_CODE_128_C
TYPE_EAN_2
TYPE_EAN_5
TYPE_EAN_8
TYPE_EAN_13
TYPE_UPC_A
TYPE_UPC_E
TYPE_MSI
TYPE_MSI_CHECKSUM
TYPE_POSTNET
TYPE_PLANET
TYPE_RMS4CC
TYPE_KIX
TYPE_IMB
TYPE_CODABAR
TYPE_CODE_11
TYPE_PHARMA_CODE
TYPE_PHARMA_CODE_TWO_TRACKS</code>

Ben resim tipini de değiştirmek istiyorum, svg istiyorum, png istiyorum derseniz onun da listesini aşağıya ekliyorum;

<code>$generatorSVG = new Picqer\Barcode\BarcodeGeneratorSVG();
$generatorPNG = new Picqer\Barcode\BarcodeGeneratorPNG();
$generatorJPG = new Picqer\Barcode\BarcodeGeneratorJPG();
$generatorHTML = new Picqer\Barcode\BarcodeGeneratorHTML();</code>

Bir de html örneği isterseniz;

<code>$generator = new \Picqer\Barcode\BarcodeGeneratorPNG();
echo '&lt;img src="data:image/png;base64,' . base64_encode($generator->getBarcode('081231723897', $generator::TYPE_CODE_128)) . '">';</code>

Şimdi bazılarınız şunu diyebilir, olum sen adamın sitesindeki buraya geçirmişsin, zaten orada yazıyor diye. Evet orada bulunan beni oku dosyasını çok basit bir şekilde Türkçeleştirerek anlattım. Maksat Türkçe kaynak oluşsun. Sıkıntı yaşayan olursa yazsın. Güzel kodlamalar…

Json ile gelen veriyi Jquery ile İşleme

Bu yazıyı askerden sizlere yazıyorum. Umarım işinizi görür.

Öncelikli amacımız json çıktısı olarak gelen 10 veya artık kaç taneyse tek tek ayırmakla uğraşmadan ilgili divleri atamayı göstereceğim. Örneğin json çıktımız şöyle olsun;

<code>{
  "toplam_yiyen": 1,
  "toplam_kisi": 10,
  "hizmet_yiyen": 1,
  "hizmet_kisi": 6,
  "guvenlik_yiyen": 0,
  "guvenlik_kisi": 0,
  "ulastirma_yiyen": 0,
  "ulastirma_kisi": 1,
  "ucaksavar_yiyen": 0,
  "ucaksavar_kisi": 3,
  "istihkam_yiyen": 0,
  "istihkam_kisi": 0
}</code>

Hemen script kodları içine şunları yazıyoruz;

<code>$.getJSON("http://localhost/yemekhane/istatistikler/son.json",function(json){
$("#toplam_toplam").html(json.toplam_kisi);
$("#toplam_yiyen").html(json.toplam_yiyen);
$("#guvenlik_toplam").html(json.guvenlik_kisi);
$("#guvenlik_yiyen").html(json.guvenlik_yiyen);
$("#hizmet_toplam").html(json.hizmet_kisi);
$("#hizmet_yiyen").html(json.hizmet_yiyen);
$("#ulastirma_toplam").html(json.ulastirma_kisi);
$("#ulastirma_yiyen").html(json.ulastirma_yiyen);
$("#istihkam_toplam").html(json.istihkam_kisi);
$("#istikam_yiyen").html(json.istihkam_yiyen);
$("#ucaksavar_toplam").html(json.ucaksavar_kisi);
$("#ucaksavar_yiyen").html(json.ucaksavar_yiyen);
});</code>

$(“#isim”) yazan yerler ilgili div’imizin idleri. Yani toplam_toplam idsine sahip divin içine json verisinin içinde yer alan toplam_kisi değerini aktarıyoruz. Hepsi bu kadar.

Laravel Public Kaldırma

Merhabalar,

İlk önce ana klasördeki htaccess dosyasına aşağıdaki kodları yazıyoruz.

<code>Options -MultiViews -Indexes

RewriteEngine On

# Handle Authorization Header

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.woff|\.woff2|\.jpg|\.svg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !^/public/

RewriteRule ^(.*)$ public/$1 [L]</code>

Public içindeki .htaccess dosyasına;

<code>Options -MultiViews -Indexes

RewriteEngine On

# Handle Authorization Header

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !^/public/

RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
</code>

Sonra ana dizinde server.php dosyasının adını index.php olarak değiştiriyoruz. Hepsi bu kadar.

Sweetalert2 Ajax Post Kullanımı

Sweetalert bilmeyeniniz varsa buraya tıklayabilirsiniz. Burada kullanımı ile ilgili bir çok yol yöntem mevcut. Sweetalert genel olarak kullanıcıya böyle güzel güzel bildirim pencereleri sunan bir mesaj kutusu diyeyim. kendileri de kendi yaptıkları ürün için güzel, responsive, düzenlenebilir bir mesaj kutusu olarak nitelendirmiş. Ben yarın birgün lazım olur diye ajax postu buraya atıyorum.

Kullanmak için ilk önce; https://unpkg.com/sweetalert/dist/sweetalert.min.js bu js dosyasını sayfaya ekliyoruz. script olarak aşağıdaki kodu yazıyoruz. diyeceksiniz ki bunu verdin de sonucunu nasıl php dosyasından alacağız ? onu da veriyorum.
Okumaya devam…

Aynı id’ye sahip nesnelerin value bilgisi alma

Merhabalar. Başlık biraz değişik gelebilir fakat aşağıda eminim resmi görünce anlayacağınızı umuyorum. Belki o zaman bana da başlık önerisinde bulunabilirsiniz.

aşağıdaki resme baktığınızda(resme tıklayın büyüyor) en son tarafta “bilgileri güncelle” yazıyor. bu bir input type normalde. daha güzel görüktüğü için input kullandım. ama bu bir form değil. inputun içine tıklayınca otomatik olarak get ile başka bir sayfaya arka planda istek gönderiyor. şimdi duruma göre 10 tane duruma göre 100 tane aynı idye sahip inputum oluyor. bu linklerin içeriği her seferinde de değişiyor. biz hangisine tıklarsak tıklayalım aynı değeri almayıp sadece tıkladığımız değeri alması için aşağıdaki kodları kullanabiliriz.
Okumaya devam…

Laravel Tasarımı Giydirme Ders #1

Themeforesttan temayı aldık. tema şahane çok güzel harika ama bunu nasıl giydiricez ? valla ben de kral tayfa gibi pek anlamam ama elimden geldiği kadarını sizlere sunuyorum. işi çok iyi bilen biri gelirse boşuna eleştirmesin.

temamızda ilk önce blank page diye bir sayfa olması lazım. eğer yoksa en boş en vasıfsız görünen grid sayfalarını bulun ve içindeki herşeyi kopyalayın. o kalsın bi kenarda.

resources/view içine bir klasör oluşturun. layouts diye. bu ana iskelet sayfamız olacak. her şey bunun üstüne kurulacak. layouts klasörünün içine app.blade.php diye bir dosya oluşturun. biliyorsunuz blade yazmak zorundayız hepsine. app.blade.php içine kopyaladığımız kodları atıyoruz.

ayrıca temada kullanacağımız tüm herşeyi (assets klasörü altında olur hepsi) tüm css,js,assets klasörlerini /public/ içine atıyoruz.

Okumaya devam…