我试图在Laravel中编写一个登录系统,它一直告诉我文本框是必需的。我已经添加了文本框,重新检查了名称是否正确,我确保在提交下面的表单时输入文字。
它一直说" credentials.username字段是必需的。",如果我从验证中删除了所需的,它也会说它是密码。
HTML:
<form method="post">
<div id="login-columns">
<div id="login-column-1">
<label for="credentials-email">Username</label>
<input id="credentials-email" name="credentials.username" tabindex="2" type="text">
<input id="credentials-remember-me" name="_login_remember_me" tabindex="5" type="checkbox">
<label class="sub-label" for="credentials-remember-me">Keep me logged in</label>
</div>
<div id="login-column-2">
<label for="credentials-password">Password</label>
<input id="credentials-password" name="credentials.password" tabindex="3" type="password">
</div>
<input name="_token" type="hidden" value="{{ csrf_token() }}">
<div id="login-column-3">
<input style="margin: -10000px; position: absolute;" type="submit" value="Login"> <a class="button" href="#" id="credentials-submit" tabindex="4"><b></b><span>Login</span></a>
</div>
<div id="login-column-4">
888 Online
</div>
</div>
</form>
PHP:
public function onPost(Request $request)
{
$validator = Validator::make($request->all(), [
'credentials.username' => 'required|exists:users',
'credentials.password' => 'required'
]);
if ( $validator->fails()) {
return Redirect::back()->withErrors($validator->messages());
}
else {
if (!Auth::attempt(['username' => $request->input('credentials.username'), 'password' => $request->input('credentials-password')])) {
return Redirect::back()->withMessage('Failed Authentication')->withColor('danger');
}
else {
$user = Auth::user();
$user->save();
return Redirect::to('/home');
}
}
}
答案 0 :(得分:0)
我相信你看到的问题是Laravel将'credentials.username'视为“嵌套属性”。例如,如果您正在渲染视图'layout.head',它将自动在布局文件夹中查找文件head.blade.php。
我认为在这种情况下,它假设您传递的数组如下:
<input id="credentials-email" name="credentials[username]" tabindex="2" type="text">
<input id="credentials-password" name="credentials[password]" tabindex="3" type="password">
你试过了吗?
<input id="credentials-email" name="credentials_username" tabindex="2" type="text">
<input id="credentials-password" name="credentials_password" tabindex="3" type="password">
Laravel验证文档页面上简要提到了嵌套属性:https://laravel.com/docs/5.4/validation
答案 1 :(得分:0)
不要在名称输入中使用点。
将credentials.username
替换为credentials_username
。
甚至更好,仅username
。
答案 2 :(得分:0)
在laravel验证中(。)表示项目数组。在这种情况下,您需要修改输入字段名称,如<input name="credentials[username]"> <input name="credentials[password]">