php - Laravel ErrorBag 总是空的
问题描述
我正在使用 LaravelFormRequest
验证表单,但ErrorBag
始终为空。我发现这是一个常见问题,因为 Laravel 默认将所有路由都放在 Web 中间件中(是的,我读到:ErrorBag 在 Laravel 5.2 中始终为空)。事情是我没有在我的routes/web.php
文件中指定这个中间件组,这应该是问题所在。
但我正在使用命名空间,我认为这可能是问题的根源。
路线:
Route::group(['namespace' => 'Pages'], function () {
Route::post('/administration/add-member', 'AdminController@addMember');
});
表单请求:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class AddMemberRequest extends FormRequest
{
public function authorize()
{
return (Auth::check() && Auth::user()->hasAllRights());
}
public function rules()
{
return [
'firstname' => 'required|alpha|max:255',
'lastname' => 'required|alpha|max:255',
'email' => 'required|email|unique:users|max:255',
];
}
}
我的控制器目前没有做任何令人难以置信的事情:
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
if (Auth::check() && !Auth::user()->hasAllRights())
throw new NotFoundHttpException();
}
public function addMember(AddMemberRequest $request)
{
var_dump($request->all());
}
数据来自这个表格(我简化了):
<form id="add-member" class="mt-3" method="post" action="{{ url('/administration/add-member') }}">
@csrf
<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<select name="season">
<option value="" selected>None</option>
ect...
</select>
<button id="btn-validate" type="submit" class="btn btn-success"><i class="fas fa-check mr-1"></i>Add member</button>
也许我的配置文件中有什么事情要做?
解决方案
将此中间件添加到您的路由
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
在您的 HTTP 内核中
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// This middleware should apply to all web routes
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
并确保它以正确的顺序运行
protected $middlewarePriority = [
// Start the session first
\Illuminate\Session\Middleware\StartSession::class,
// Then share errors from it
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class,
];
推荐阅读
- sql - 如何重新运行 Diesel 迁移?
- python - 如何在python中使用isdigite进行浮点数
- three.js - 对象在屏幕上保持相同大小,无论其与相机的距离如何
- xml - 元素内元素的 DTD
- python-3.x - 在 Windows 上安装 Pipenv
- macos - 有没有比文件或 mdls 更快的方法在命令行中获取 MacOS X 上的文件类型
- amazon-s3 - 从 S3 复制文件时出现 AWS CodeBuild 错误 - COMMAND_EXECUTION_ERROR:原因:退出状态 1 (NodeJS)
- java - Minecraft Forge - Loop 不断覆盖自己
- python-3.x - 嘿,我正在尝试使用 selenium 在 python 中自动化某些东西,但我似乎无法单击按钮。下面附上截图
- assembly - 这条线到底是什么意思?