php - Laravel 重定向输入和错误不起作用
问题描述
我在让 ->withInput() 和 ->withErrors() 工作时遇到问题,以便在验证失败时我可以在刀片中检索它们。
这就是我在控制器中的内容:
$rules = array(
'mobile' => 'required'
);
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
$fieldsWithErrorMessagesArray = $validator->messages();
$fieldsWithErrorMessagesArray = $fieldsWithErrorMessagesArray->messages();
$formattedErrorArray = array();
foreach ($fieldsWithErrorMessagesArray as $key => $error) {
$formattedErrorArray[$key] = $error[0];
}
return redirect()->back()->withInput()->withErrors($formattedErrorArray);
}
但是在刀片中,当 var_dump $errors 时,我得到了这个:
object(Illuminate\Support\ViewErrorBag)#267 (1) { ["bags":protected]=> array(0) { } }
如果我要 dd($fieldsWithErrorMessagesArray),它会给我:
array:7 [▼
"mobile" => array:1 [▼
0 => "The mobile field is required."
]
]
我也试过这种方式:
$test = array(
'mobile' => 'No jobs found. Please try searching with different criteria'
);
return redirect()->back()->withInput()->withErrors($test);
这行得通,我不确定为什么另一个不起作用。使用这个测试数组,刀片文件看起来像这样:
object(Illuminate\Support\ViewErrorBag)#264 (1) { ["bags":protected]=> array(1) { ["default"]=> object(Illuminate\Support\MessageBag)#265 (2) { ["messages":protected]=> array(2) { ["mobile"]=> array(1) { [0]=> string(59) "No jobs found. Please try searching with different criteria" }} ["format":protected]=> string(8) ":message" } } }
这是我的刀片文件的样子:
@if ($errors->has('mobile'))
@foreach($errors->get('mobile') as $error)
<span class="validation_error">{{$error}}</span>
@endforeach
@endif
<div class="form-group">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><i
class="fas fa-mobile-alt text-info"></i>
</div>
</div>
<input type="number" class="form-control" value="{{old('mobile')}}" name="mobile"
placeholder="Mobile Number">
</div>
</div>
我也有 var_dump 来查看带回的任何错误:
<?php
echo var_dump($errors) . "</br>";
?>
下面我提供了 Kernel.php 文件的外观:
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
protected $middlewarePriority = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class,
];
解决方案
为什么不直接使用“自动重定向”:
$validator = Validator::make($request->all(), array(
'mobile' => 'required'
));
$validator->validate(); // automatically redirects if validation fails
validate
您可以在现有验证器实例上调用该方法。如果验证失败,将自动重定向用户。
这是完整的文档:https ://laravel.com/docs/master/validation#automatic-redirection
注意 1:确保Illuminate\View\Middleware\ShareErrorsFromSession
中间件列在您的web
中间件组中\app\Http\Kernel.php
(完整文档)。
注意 2:Laravel 将检查会话数据中的错误,因此请检查会话驱动程序\config\session.php
和要设置SESSION_DRIVER
的文件属性。.env
尝试不同的驱动程序并检查它是否有效。
推荐阅读
- python - 在交替字母练习中使用 **kwargs
- html - 是否有可以嵌套在其他元素中的 HTML5 元素列表?
- c++ - 如何使用列表作为值的无序映射
- node.js - 丢弃 NodeJS 转换流中的块并读取下一个
- python - 在 Python 中创建 excel 图表时获取不同的折线图类型
- javascript - 当我执行执行注册或登录的 ajax 请求时,它无法正常工作
- javascript - 用户成功登录后如何通过路由器立即将用户重定向到新页面(密码,用户名正确)
- java - 如何在 Java 中使用 JButton
- python - 您可以将 python 脚本输出的值写入另一个 python 脚本中的空列表吗?
- python-3.x - 如何测试具有多个输入调用的循环?