ID dolu geldiğinde sorun yok demişsiniz, db de olmayan bir id'yi adres çubuğundan yazarsanız php'nin yine hata vermesi muhtemeldir, kullanıcıların adres çubuğu üzerinden yapacağı değişiklikleri ön görmelisiniz, bütün kullanıcılarınız programınızı sizin yazdığınız şekliyle kullanmayabilir.
form.blade.php dosyanızın için de
$firma değişkenini kullanmadan önce
@if(!is_null($firma)) {{ $firma->isim }} @endif
şeklinde bir kontrol yaparsanız hem mevcut yaşadığınız bu hata düzelir, hem de diğer hatalardan kurtulursunuz.
Diğer hatalar;
--Silinmiş bir kaydı sorguladığınız da sizin yazdığınız kod sorgu yapar ama null döner ve siz burada her hangi bir kontrol yapmadığınızdan form yine ekrana basılır ve yine aynı form hatasını yaşarsınız.
--DB hatası yada başka sebeplerle sorgunun tamamlanamaması durumunda yine bir üstteki sorunu yaşarsınız.
--Kullanıcınızın adres çubuğuna müdahalesi ile gelen 21351321 id değeri ile yapılan
$firma = DB::table("firmalar")->where("id",21351321)->first();
bu sorgu sonucu da
null döneceğinden yine üstteki hatayı yaşarsınız..
Sorgudan sonra yapacağınız bu kontrol, sizi db hatalarından ve art niyetli kullanıcılardan bir nebze olsun kurtaracaktır.
public function form($id = null) {
$firma = null;
if ($id != null) {
$firma = DB::table("firmalar")->where("id", $id)->first();
if (is_null($firma)) return Redirect::route('homepage YADA firma listesine geri dönüş rotası')->with('error','Erişmek istediğiniz kayıt bulunamadı'); //bu şekilde kontrol program açısından iyi olacaktır.
return View::make('firma/form',compact('firma');
}
return View::make('firma/form',compact('firma');
}
form.blade içinde de gerekli is_null kontrolleri ile sorun yaşamazsınız.
Ayrıca firmalar tablonuzda bulunan firma verileri her hangi bir kullanıcıya ait ise, yani
ali kullanıcısının 2 firması,
veli kullanıcısının 4 firması gibi ya da diğer tablolarınız da böyle bir durum söz konusu ise, sorguyu sadece tablo id si ile yapmanız yine güvenlik açığına sebep olabilir.
Bu gibi durumların olduğu tablolar için sorgunuzu
$firma = DB::table("firmalar")->where("id", $id)->where('firma_owner','=',Auth::user()->id)->get();
(
firma_owner bölümü firmalar bölümünde firma sahibi belirten alan) şeklinde değiştirerek güvenli hale getirebilirsiniz.
Gösterilmek istenen içeriğin ID si yanına veri sahibinin ID sini de sorguya eklerseniz, kayıt üzerinde yetkisi olmayan kullanıcılarınızı engellemiş ve asıl kullanıcının bilgilerini korumuş olursunuz.
Aksi halde, ben adres çubuğundan id 7 dediğim zaman o id ye ait verileri görmem mümkün olacaktır.
Konunuza göre biraz uzun oldu kusura bakmayın, umarım faydalı olur.
Kolay gelsin.