Ошибка в том, что метод ->validate()
возвращает array
с проверенными данными при применении к классу Request
.С другой стороны, вы используете метод ->fails()
, который используется при создании валидаторов вручную.
Из документации :
Создание вручнуюВалидаторы
Если вы не хотите использовать метод validate
в запросе, вы можете создать экземпляр валидатора вручную, используя фасад Validator
.Метод make
на фасаде создает новый экземпляр валидатора:
use Validator; // <------
use Illuminate\Http\Request;
class PostController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [ // <---
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
}
->fails()
вызывается в ответе метода Validator::make([...])
, который возвращает экземпляр Validator
.Этот класс имеет метод fails()
, который будет использоваться при попытке обработать ответ об ошибке вручную.
С другой стороны, если вы используете метод validate()
для объекта $request
, результатом будетмассив, содержащий проверенные данные в случае, если проверка прошла успешно, или она обработает ошибку и добавит подробности ошибки в ваш ответ, которые будут отображаться в вашем представлении, например:
public function store(Request $request)
{
$validatedData = $request->validate([
'attribute' => 'your|rules',
]);
// I passed!
}
Laravel обработает ошибку проверкиавтоматически:
Как видите, мы передаем нужные правила проверки в метод validate.Опять же, если проверка не пройдена, автоматически генерируется правильный ответ.Если проверка пройдена, наш контроллер продолжит нормально работать.