Правило prohibited
Правило prohibited применяется в системе валидации Laravel и используется для запрета передачи определённого поля в запросе. Если поле присутствует в запросе, валидация будет провалена. Первым параметром передаётся имя поля, которое должно отсутствовать.
Это правило особенно полезно в ситуациях, когда нужно защитить определённые поля от изменения через API или когда поле должно присутствовать только при определённых условиях.
Синтаксис
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'field' => 'prohibited'
]);
?>
В форме запроса:
<?php
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
public function rules()
{
return [
'password' => 'prohibited',
'email' => 'required|email'
];
}
}
?>
Пример
Давайте создадим валидацию, которая запрещает передачу поля 'role':
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'name' => 'John',
'role' => 'admin'
];
$validator = Validator::make($data, [
'name' => 'required|string',
'role' => 'prohibited'
]);
if ($validator->fails()) {
echo $validator->errors()->first();
}
?>
Результат выполнения кода:
"The role field is prohibited."
Пример
Давайте используем правило prohibited вместе с условной валидацией через prohibited_if. Запретим поле 'password', если передано поле 'social_login':
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'social_login' => true,
'password' => 'secret123'
];
$validator = Validator::make($data, [
'social_login' => 'required|boolean',
'password' => 'prohibited_if:social_login,true'
]);
if ($validator->fails()) {
echo $validator->errors()->first();
}
?>
Результат выполнения кода:
"The password field is prohibited when social login is true."
Пример
Давайте используем правило prohibited в классе FormRequest. Создадим запрос для обновления пользователя, где поле 'id' запрещено:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'id' => 'prohibited',
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email,' . $this->user()->id
];
}
public function messages()
{
return [
'id.prohibited' => 'The user ID cannot be changed.'
];
}
}
?>
Теперь использование этого запроса в контроллере:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UpdateUserRequest;
use App\Models\User;
class UserController extends Controller
{
public function update(UpdateUserRequest $request, User $user)
{
$validated = $request->validated();
$user->update($validated);
echo "User updated successfully.";
}
}
?>
Смотрите также
-
правило
prohibited,
которое запрещает наличие поля -
правило
required,
которое требует обязательного наличия поля -
правило
present,
которое проверяет наличие поля в запросе -
правило
exclude_if,
которое исключает поле при определённых условиях