我使用以下命令创建身份验证系统:
php artisan make:auth
工作正常。但是,当我尝试自定义设计和其他内容时,一切对我来说似乎都是混乱的。即:当我尝试使用错误的凭据时,则无法显示类似``无效的用户名/密码''的消息。我检查了Auth文件夹中的所有控制器,但是那里没有详细的代码。我的要求非常简单:我只想从控制器传递错误消息,以使用定制设计的HTML模板进行查看和显示。这是我的登录表格:
@extends('layouts.login')
@section('content')
<div class="content">
<!-- BEGIN LOGIN FORM -->
<form class="login-form" method="POST" action="{{ route('login') }}">
@csrf
<h3 class="form-title">Login to your account</h3>
CUSTOM_ERROR_MESSAGE_IF_LOGIN_FAILED
<div class="alert alert-danger display-hide">
<button class="close" data-close="alert"></button>
<span>
Enter any username and password. </span>
</div>
<div class="form-group">
<!--ie8, ie9 does not support html5 placeholder, so we just show field title for that-->
<label class="control-label visible-ie8 visible-ie9">Username</label>
<div class="input-icon">
<i class="fa fa-user"></i>
<!-- <input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"/> -->
<input id="email" type="email" class="form-control placeholder-no-fix" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
</div>
</div>
<div class="form-group">
<label class="control-label visible-ie8 visible-ie9">Password</label>
<div class="input-icon">
<i class="fa fa-lock"></i>
<!-- <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password"/> -->
<input id="password" type="password" class="form-control placeholder-no-fix" name="password" required autocomplete="current-password">
</div>
</div>
<div class="form-actions">
<label class="checkbox">
<!-- <input type="checkbox" name="remember" value="1"/> -->
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
Remember me </label>
<button type="submit" class="btn blue pull-right">
Login <i class="m-icon-swapright m-icon-white"></i>
</button>
</div>
<div class="forget-password">
<h4>Forgot your password ?</h4>
<p>
no worries, click <a href="{{ route('password.request') }}" >
here </a>
to reset your password.
</p>
</div>
<div class="create-account">
<p>
Don't have an account yet ? <a href="javascript:;" id="register-btn">
Create an account </a>
</p>
</div>
</form>
<!-- END LOGIN FORM -->
</div>
@endsection
如何显示CUSTOM_ERROR_MESSAGE_IF_LOGIN_FAILED?
答案 0 :(得分:2)
首先,请相信我,我们到过您现在的地方。在学习新框架及其工作原理时,这令人沮丧。
一个建议就是彻底地阅读文档,关于Laravel,没有什么是找不到的。至少,您通常不需要任何基础知识。
关于您的问题,您说:
我只想从控制器传递错误消息以查看并显示它 我的自定义设计的HTML模板。
因此,我将做出一个大胆的猜测,说您是在自行处理登录过程,而不是使用内置的Laravel功能。
如果我错了,而您正在使用laravel登录功能中的build,那么您需要做的就是:
@if ($errors->has('email'))
<span class="invalid-feedback">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
当输入错误的凭据并尝试登录时,Laravel会使用键“电子邮件”返回错误,因此只要您愿意,就可以使用$errors->first('email')
打印消息并对其进行样式设置。
现在,如果我是对的,并且您正在使用自定义登录方法:
在您的控制器中,您可以像这样自定义消息:
$messages = [
'email.required' => 'Email is required!',
'password.required' => 'Password is required!'
];
$validatedData = $request->validate([
'email' => 'required|email',
'password' => 'required|string',
], $messages);
当然,这只是一个示例,您可以进行各种验证和各自的自定义消息。如果要使用验证的内置错误消息,则不要提供像这样的消息数组:
$validatedData = $request->validate([
'email' => 'required|email',
'password' => 'required|string',
]);
在validate()
上使用$request
方法时,如果验证失败,则Laravel默认会向刀片返回有效的错误响应,该响应将具有与您的请求变量名称相同的键,并具有与错误消息,您可以轻松地访问它们,与情况1相同:
@if ($errors->has('email'))
<span class="invalid-feedback">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
您已设置好。 最终,也许除了验证以下用例之外,您还希望从控制器中返回一些自定义错误:
在控制器内部使用withErrors()
方法:
return Redirect::back()->withErrors(
[
'email' => 'Snap! you are done!'
]
);
您可能已经猜到了,在视图内部显示此错误与以前完全相同:
@if ($errors->has('email'))
<span class="invalid-feedback">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
我希望对您有帮助
快乐编码:)
答案 1 :(得分:0)
您可以使用以下命令输出错误消息:
@if(count($errors) > 0)
@foreach( $errors->all() as $message )
<div class="alert alert-danger display-hide">
<button class="close" data-close="alert"></button>
<span>{{ $message }}</span>
</div>
@endforeach
@endif
如果您有自定义路由,则需要从控制器重定向到登录页面并传递错误:
$errors = ['ur errors'];
return redirect()->back()->withErrors($errors);