В Laravel правило «существует» обычно используется для проверки существования значения в данном столбце таблицы базы данных. Хотя Laravel предоставляет это правило по умолчанию для базовых сценариев, существуют ситуации, когда вам может потребоваться создать собственное правило «exists» для обработки сложных требований проверки. В этой статье мы рассмотрим различные методы создания собственного правила «exists» в Laravel, сопровождаемые примерами кода.
Метод 1: расширение класса Validator
Первый метод включает расширение класса Validator и добавление специального правила проверки для проверки «существует». Вот пример того, как этого можно добиться:
// Create a new file: app/Rules/CustomExistsRule.php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\DB;
class CustomExistsRule implements Rule
{
protected $table;
protected $column;
public function __construct($table, $column)
{
$this->table = $table;
$this->column = $column;
}
public function passes($attribute, $value)
{
return DB::table($this->table)
->where($this->column, $value)
->exists();
}
public function message()
{
return 'The selected :attribute is invalid.';
}
}
Чтобы использовать это специальное правило при проверке, вы можете сделать следующее:
use App\Rules\CustomExistsRule;
$request->validate([
'email' => ['required', new CustomExistsRule('users', 'email')],
]);
Метод 2: использование правила на основе замыкания
Другой подход заключается в использовании правила на основе замыкания для создания пользовательской проверки «существования». Вот пример:
use Illuminate\Validation\Rule;
$rule = Rule::exists('users', 'email')->where(function ($query) {
$query->where('status', '=', 'active');
});
$request->validate([
'email' => ['required', $rule],
]);
Метод 3: реализация интерфейса правил
Вы также можете реализовать интерфейс правил напрямую, чтобы создать собственное «существующее» правило. Вот пример:
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\DB;
class CustomExistsRule implements Rule
{
public function passes($attribute, $value)
{
return DB::table('users')
->where('email', $value)
->exists();
}
public function message()
{
return 'The selected :attribute is invalid.';
}
}
$request->validate([
'email' => ['required', new CustomExistsRule],
]);
Создание пользовательских правил «существования» в Laravel позволяет легко справляться со сложными сценариями проверки. В этой статье мы рассмотрели три различных метода достижения этой цели. Вы можете выбрать метод, который лучше всего соответствует вашим требованиям, и реализовать его в своих приложениях Laravel.
Помните, что пользовательские правила проверки обеспечивают гибкость и возможность повторного использования, гарантируя, что проверка вашего приложения останется надежной и удобной в обслуживании.