Merhaba,
Öncelikle bildiğim kadarıyla Laravel'de GET ile bir resource controllerın destroy metoduna ulaşamıyoruz çünkü destory DELETE kullanıyor ve bunun için metodu DELETE olan bir form kullanmamız lazım (html ya da javascript ile). Bildiğiniz gibi tarayıcılar şu an PUT ve DELETE desteklemediği için Laravel de bu işi hidden input ile hallediyor. Bunu konuyu ele almamım sebebi örneğin tabular dediğimiz kayıtlarla uğraşırken bazen checkbox kullanmak yerine (checkboxu işaretleyip "seçili kayıtları sil" şeklinde) html link tercih edebiliriz. Bunun birçok sebebi olabilir, kullanıcının toplu kayıt silmesini engelleme ya da kayıt ile ilişkili başka işlemler yapılıyorsa toplu silmenin geçersiz işlem yürütülmesine ya da performans düşüşüne sebep olabileceğini düşünerek vs... Bu işin DELETE ile yapılmasının sebeplerinden biri de sanırım güvenlik, CSRF koruması gibi.
Ben şöyle bir yol kullanıyorum:
Öncelikle şöyle bir filtre hazırladım
Route::filter('inline-csrf', function($route)
{
if (Session::token() != $route->getParameter('token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
Bu filtre CSRF korumasını GET metoduyla kullanmamı sağlıyor. Örnek vermem gerekirse:
Route::get('tasks/{id}/delete/{token}',array('before'=>'inline-csrf','as'=>'admin.tasks.delete','uses'=>'TaskController@delete'));
şeklinde bir route oluşturup daha sonra şu şekilde bir html linki kullanabiliyorum:
<a href="<?php echo URL::route('admin.tasks.delete',array($this->id,csrf_token()));?>">Sil</a>
Bu, bana şöyle bir link oluşturuyor:
<a href="http://domain.com/admin/tasks/5/delete/7Pc3sY1wIP7XjzLr3OTAfPxTg2jvfaynrt5q99MO">Sil</a>
Controller içerisine de delete isimli bir metot ekleyerek, gerekli kontrolleri yapıp silme işlemini gerçekleştiriyorum
Şu ana kadar bir sıkıntı yaşamadım ama yine de içim rahat değil.
- Bu yol güvenli midir?
- Siz bu konuyu nasıl hallediyorsunuz? Sizin kullandığınız yollar neler?
Şimdiden fikirleriniz için teşekkür ederim.