Validasyon için request sınıfları oluşturduğunuzu varsayıyorum, klasik validation:make() olayı değil yani.
Ben basit bir ileti/mesaj denemesi üzerinde çalıştım; title, slug, content, 3 tane alanım var, slug alanı uniq. Olay id yerine slug kullandığımdan biraz karışıyor.
post/{slug}/edit, post/{slug}/create, şeklinde slug ile çalıştım, id ile çalışmadım. Id ile çalışmadığım için, validasyon kurallarına id'yi bir şekilde geçirme ihtiyacı doğdu.
Validasyon için request dosyalarımı oluşturdum, işimiz tamamen Update olayı ve dosyası ile...
$ php artisan make:request CreatePostRequest
$ php artisan make:request UpdatePostRequest
Id ile çalışıldığında direk kurallar içinde id alanını $this->get('id') ile alabiliyoruz. UpdatePostRequest içindeki kuralımızın slug kısmı aşağıdaki gibi oluyor.
'slug' => 'required|alpha_dash|unique:posts,slug,'.$this->get('id'),
Benim çalışmamda id yok, slug var. Id'ye direk bir biçimde ulaşamadım.
Dokümandaki "unique:table,column,except,idColumn" şablonu biraz kafa karıştırıyor, buna göre yazılan kod çalışmadığından, idColumn değeri id için ayrılan alan olması gerektiğini, başka bir alandan sorgulama yapmadığını anlıyoruz.
(Model dosyası üzerinden primary id alanını değiştirebiliyoruz, o şekilde slug tablosunu primary yaparsak ancak o zaman çalışır diye düşünüyorum.)
'slug' => 'required|alpha_dash|unique:posts,slug,'.$this->get('slug').',slug',
Şu ana kadar üç yöntem buldum.
1. Kurallardan önce Eloquent ile id'ye ulaşmak
$post = Post::whereSlug($this->get('slug'))->first();
//echo $post->id;
2. Edit işlemini sağlayan forma gizli bir alan eklemek ve bunu kural içinde $this->get('id') ile almak.
{!! Form::hidden('id', $post->id) !!}
3. post/{slug}/edit, post/{slug}/create, şeklindeki kullanımı terk edip, post/{id}/edit, post/{id}/create yapısını kullanmak.
Birinci seçenek ekstradan SQL sorgusu içerdiğinden pek cazip değil ancak id numarasını göstermek istemiyorsak o zaman kullanılabilir.
Bunlar dışında ek birkaç kod kullanmadan direk kurallar içinden id'ye erişemedim ve erişilebileceğini de sanmıyorum.
En son işlem olarak da Create ve Update için ek bir Request dosyası kullanımına geçtim.
public function rules()
{
$rules = [
'title' => 'required',
'slug' => 'required|alpha_dash|unique:posts,slug',
'content' => 'required'
];
// For update
if ($this->get('id'))
{
$rules['slug'] = 'required|alpha_dash|unique:posts,slug,'.$this->get('id');
}
return $rules;
}