Öncelikle elinize sağlık, güzel ve anlaşılabilir bir anlatım olmuş. Ancak birkaç görüş belirtmek istiyorum.
<!DOCTYPE HTML PUBLIC "-//W3C//
DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
ve
<table cellpadding="0" cellspacing="0" border="0" width="100percent">
<tr>
<td width="450" valign="top">
<p>Title: {{$image->title}}</p>
HTML'ler IDE tarafından otomatik oluşturulmuş gibi. IE6 gibi tarayıcıları düşünmüyorsanız (bence düşünmek için bir sebep yok) HTML'lerin üzerinden birdefa olsun geçmenizi öneririm. 90'ların HTML'sine benzemiş. Laravel gibi modern bir frameworkün kitabında bunun yeri olmamalı.
{{ title }} sanitize edilmiyor. {{{ title }}} kullanarak (önerilir) veya validasyon esnasında custom bir regexten geçirerek (önerilmez) escape etmeniz gerekir. Şu haliyle XSS açığı olduğunu düşünüyorum. Eğer bilerek bıraktıysanız ve ileriki chapterlerde güvenlik konusunu işleyecekseniz bunu es geçebilirsiniz ama en azından bir not eklenebilir escaping konusuyla ilgili. (veya baştan bu konu ele alınabilir ve kitabın geri kalanında inputlar escape edilir.)
Validasyonlar çok kısa olmuş. Kullanıcı 400'den uzun string girebiliyor ama veritabanı varchar(400). Image alanlarına da maximum kb değeri girmenin genel olarak iyi bir kullanım olacağını düşünüyorum. Tabi bu biraz da tercih meselesi.
Birde son olarak, neden bilmiyorum (belki benim PDF Readerimden kaynaklıdır), yazılar soldan ve sağdan çok basık geldi. Yazı alanı çok dar ve buda kod parçalarının alt satırlara kaymasına sebep oluyor. Sahip olduğum diğer e-kitaplarla karşılaştırdım, sizin kitabınız sağdan ve soldan çok fazla boşluk bırakmış. Yazılar ortaya sıkışmış ve buda okumada güçlük çıkartıyor.
Örneğin:
<p>No images uploaded yet, {
{HTML::link('/','care to upload one?')}}</p>
{ alt satırda olmalı.
//This route is to delete the image with given ID
Route::get('delete/{id}', array
('as'=>'delete_image','uses'=>
'ImageController@getDelete'))
->where('id', '[0-9]+');
Yukarıdaki script, şu şekilde yazılsa çok daha iyi ve okunaklı olurdu:
//This route is to delete the image with given ID
Route::get('delete/{id}', array(
'as' => 'delete_image',
'uses' => 'ImageController@getDelete')
)->where('id', '[0-9]+');
Son script ise inanılmaz derecede basık duruyor. Kitapta bu şekilde yazılmış durumda ve okumak neredeyse imkansız.
Image::make(Config::
get( 'image.upload_folder').'/'.$fullname)
->resize(Config::get( 'image.thumb_width'),
null, true)
->save(Config::get
( 'image.thumb_folder').'/'.$fullname);
Bu sorunların üzerinden geçmenizi umuyorum. Yazılarınız ve yaptığınız uygulama ise kaliteli.
Ps. $fillable kullanımını bilmiyordum. Öğrendiğim iyi oldu!
Ps. Kodları kitabınızdan aldı. Sorun olacağını düşünüyorsanız kaldırayım.