在登录表单中使用laravel 7 /livewire 1.3应用程序时,我收到了无效表单上的错误,代码如下:
public function submit()
{
$loginRules= User::getUserValidationRulesArray();
$this->validate($loginRules);并在任何字段附近显示错误消息。
我希望在登录时不能添加闪存消息并在https://laravel.com/docs/7.x/validation上阅读
我试着做:
$request = request();
$loginRules= User::getUserValidationRulesArray('login');
$validator = Validator::make($request->all(), $loginRules);
if ($validator->fails()) {
session()->flash('danger_message', 'Check your credentials !');
return redirect()->to('/login');
}我收到了闪存消息,但是任何字段的验证错误都会丢失。
如果我试图:
$request = request();
$loginRules= User::getUserValidationRulesArray('login');
$validator = Validator::make($request->all(), $loginRules);
if ($validator->fails()) {
session()->flash('danger_message', 'Check your credentials !');
return redirect('/login')
->withErrors($validator)
->withInput();
}我犯了错误:
Method Livewire\Redirector::withErrors does not exist.在路由/web.php中,我有:
Route::livewire('/login', 'login')->name('login');修改后的 : In component app/Http/Livewire/Login.php:
<?php
namespace App\Http\Livewire;
use App\User;
use Illuminate\Support\Facades\Validator;
use Livewire\Component;
use Auth;
use DB;
use App\Config;
use Cartalyst\Sentinel\Laravel\Facades\Sentinel;
class Login extends Component
{
public $form= [
'email'=>'admin@mail.com',
'password'=> '111111',
];
private $view_name= 'livewire.auth.login';
public function submit()
{
$request = request();
$loginRules= User::getUserValidationRulesArray('login');
$validator = Validator::make($request->all(), $loginRules);
if ($validator->fails()) {
session()->flash('danger_message', 'Check your credentials !');
return;
// return redirect()->to('/login');
}
$user = Sentinel::findByCredentials(['email' => $this->form['email']]);
if (empty($user)) {
session()->flash('danger_message', 'User "' . $this->form['email'] . '" not found !');
...以及模板资源/视图/livewire/auth/login.blde.php:
<article >
@include('livewire.common.alert_messages')
<form class="form-login" wire:submit.prevent="submit">
<div class="card">
@if ($errors->any())
Check your login credentials
@endif
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
<div class="card-body card-block">
<h3 class="card-header">
<span class="spinner-border" role="status" wire:loading>
<span class="sr-only">Loading...</span>
</span>
Login
</h3>
<h4 class="card-subtitle">Use your credentials</h4>
<dl> <!-- email FIELD DEFINITION -->
<dt>
<label class="col-form-label" for="email">Email:<span class="required"> * </span></label>
</dt>
<dd>
<input
wire:model.lazy="form.email"
name="email"
id="email"
class="form-control"
placeholder="Your email address"
autocomplete=off
>
@error('form.email')
<div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
</dd>
</dl> <!-- <dt> email FIELD DEFINITION -->
<dl> <!-- password FIELD DEFINITION -->
<dt>
<label class="col-form-label" for="password">Password:<span class="required"> * </span></label>
</dt>
<dd>
<input type="password"
wire:model.lazy="form.password"
id="password"
name="password"
class="form-control"
placeholder="Your password"
autocomplete=off
>
@error('form.password')
<div class="validation_error">{{ clearValidationError($message,['form.'=>'']) }}</div> @enderror
</dd>
</dl> <!-- <dl> password FIELD DEFINITION -->
</div> <!-- <div class="card-body card-block"> -->
<section class="card-footer row_content_right_aligned">
<button type="reset" class="btn btn-secondary btn-sm m-2">
Reset
</button>
<button type="submit" class="btn btn-primary btn-sm m-2 ml-4 mr-4 action_link">
Submit
</button>
</section>
</div> <!-- <div class="card"> -->
</form>
</article>哪条路是有效的?
提前感谢!
发布于 2020-09-21 05:35:35
Livewire的优点在于,您不一定需要重定向以闪存消息,您可以通过在组件上设置属性并在视图中有条件地呈现消息来显示消息。在这种情况下,逻辑已经可用,您只需检查通过验证公开的错误对象。
在您的视图中,您所要做的就是检查@if ($errors->any()) --如果是这样的话,就显示您的消息。这是一个Laravel特性,它是Livewire实现的。当任何验证失败时,都会抛出并截获一个异常,$errors变量将被公开到您的视图中。这意味着,当您执行$this->validate()时,当验证失败时,您可以访问$errors中的错误。
<div>
@if ($errors->any())
Check your login credentials
@endif
<form wire:submit.prevent="submit">
<input type="text" wire:model="email">
@error('email') <span class="error">{{ $message }}</span> @enderror
<input type="password" wire:model="password">
@error('password') <span class="error">{{ $message }}</span> @enderror
<button type="submit">Submit</button>
</form>
</div>使用$rules属性声明规则,用$this->validate()验证这些规则,Livewire将为您完成大部分工作。您不需要返回任何重定向或使用session()->flash()。会话状态不会闪烁,因为您没有执行新的页面加载。
class Login extends Component
{
public $form = [
'email' => 'admin@mail.com',
'password' => '111111',
];
protected $rules;
private $view_name = 'livewire.auth.login';
public function submit()
{
$this->rules = User::getUserValidationRulesArray('login');
$this->validate();
// No need to do any more checks, $errors will now be updated in your view as the exception is thrown
// Proceed with submitting the form发布于 2020-11-24 00:36:31
在呈现方法之前,您可以检查errorBag是否有项:
public function render()
{
if(count($this->getErrorBag()->all()) > 0){
$this->emit('error:example');
}
return view('livewire-component-view');
}https://stackoverflow.com/questions/63986147
复制相似问题