BoraN7 Laravelin Str classındaki slug methodununu neden kullanmıyorsun?
Illuminate\Support\Str::slug("Post 1") => post-1
store
$request->validate([
'name' => ['required'],
'slug' => ['required', new Slug(Project::class, 'slug')],
]);
update
$request->validate([
'name' => ['required'],
'slug' => ['required', new Slug(Project::class, 'slug'), $project],
]);
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Slug implements Rule
{
private $column;
private $model;
private $ignore;
/**
* Create a new rule instance.
*
* @param $model
* @param string $column
* @param null $ignore
*/
public function __construct($model, string $column, $ignore = null)
{
$this->column = $column;
$this->model = $model;
$this->ignore = $ignore instanceof Model ? $ignore->getKey() : $ignore;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$instance = new $this->model;
if ($instance->where($this->column, Str::slug($value))
->where($instance->getKeyName(), '!=', $this->ignore)->first())
{
return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Farklı Slug Giriniz Kayıt Bulunuyor.';
}
}