【发布时间】:2019-09-05 17:02:55
【问题描述】:
我正在使用 Laravel FormRequest 验证表单,但 ErrorBag 始终为空。我发现这是一个常见问题,因为 Laravel 默认将所有路由都放在 Web 中间件中(是的,我读到了这个:ErrorBag is always empty in 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>
也许我的配置文件中有什么事情要做?
【问题讨论】:
-
您可以运行
php artisan route:list并查看影响您遇到问题的路由的中间件。您可能没有为该路由启用会话中间件(会话用于将您的错误闪回到下一页) -
你使用的是什么版本的 Laravel?
routes.php是个很老的东西了 -
Caddy DZ 我正在使用最后一个版本。我没有
routes.php文件,我只是从帖子中不假思索地拿起了这个……我编辑了我的帖子来纠正这个问题。 -
deefour 我遇到问题的路线有 web 和 auth 中间件。它还应该有一个会话中间件吗?
标签: php laravel error-handling