【发布时间】:2020-11-22 13:49:48
【问题描述】:
我正在将 cms 从 5.7 迁移到最新版本,并且我已经 3 年没有使用 laravel 了。
我有一个错误:简而言之:我有一个表单,我有一个带有保存操作、验证规则和消息以及验证的控制器。现在验证器似乎正在工作(失败),并将我重定向到上一个。溃败,但 $errors 变量始终为空,并且不存储旧表单值。
发布有效的表单可以正常工作。
我把相关的东西贴在下面:
路线
Route::group(['middleware' => ['adm', 'sentinelauth', 'web' ]], function () {
Route::group(['prefix' => 'roles'], function () {
Route::get('/', 'BE\RolesController@getIndex' ) ->name('adm_roles_index');
Route::get('/add', 'BE\RolesController@addAction' ) ->name('adm_roles_add');
Route::get('/{role}', 'BE\RolesController@editAction') ->name('adm_roles_edit');
Route::post('/save', 'BE\RolesController@submitAction') ->name('adm_roles_save');
});
/// some more routs ehere
}
控制器(相关的东西)
public function addAction(Request $request)
{
return $this -> addPageAction($request);
}
public function editAction(Role $role, Request $request)
{
return $this -> addPageAction($request, $role);
}
private function addPageAction(Request $request, $role = null)
{
$mode = 'edit';
$_userRoles = array();
$activationStatus = false;
$roles = false;
if (!$role)
{
$mode = 'add';
}
else
{
if ($role->id == 1) { // editing the supervisor is not allowed, redirect to list page
return redirect( route('adm_roles_index') );
}
}
return view('BE.roles.edit') -> with([
'action' => $mode,
'data' => $role,
]);
}
public function submitAction(Request $request)
{
$messages = [
'name.required' => 'The name is required.',
'name.unique' => 'The name is already in use.',
'slug.required' => 'The slug is required.',
'slug.unique' => 'The slug is already in use.',
];
$validatorRules = array(
'name' => 'required|unique:roles',
'slug' => 'required|unique:roles',
);
if ( !empty($request->id) ) {
$role = Sentinel::findRoleById($request->id);
if ($role) {
$validatorRules['name'] = 'required|unique:roles,name,' . $role->id;
$validatorRules['slug'] = 'required|unique:roles,slug,' . $role->id;
}
}
$this -> validate($request, $validatorRules, $messages);
/// some more stuff down here for storing the roles etc. but not so important
}
刀片
{{ dump($errors) }}
{!! Form::open(array('url' => route('adm_roles_save'), 'method' => 'post', 'class' => 'form-horizontal', 'id' => 'Form', 'name' => 'Form', )) !!}
{!! Form::label('name', 'Name', []) !!}
{!! Form::text('name', old('name', (!empty($data -> name)) ? $data -> name : null ),
[ 'placeholder' => 'Name',
'class' => ($errors->has('name') ? 'form-control is-invalid' : 'form-control' )
]
) !!}
{!! Form::close() !!}
这个刀片总是显示
Illuminate\Support\ViewErrorBag {#776 ▼
#bags: []
}
【问题讨论】:
-
在你的刀片上像这样检查
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif -
没有成功....发布一个空表单没有显示任何内容=>验证正在运行,因为我重定向了,但错误没有通过....我猜
-
函数是
submitAction? -
处理 POST?是的。如果我在验证之前 dd() 请求,则值在那里(空或 npot,当然取决于形式)。如果我提交了无效的表单,验证运行并发生重定向,因为制作 dd('xxx');验证后不会执行。如果发布了有效的表单,则验证通过并且 func.继续。
-
实际上问题是,您进行了验证。但不返回任何东西。它将返回哪里?
标签: laravel