使用最新的Laravel 5.7.8
和在Laravel 5.6.3
中有效的方法可能不适用于我的情况。
我正在尝试创建联系表单验证(必需的ALERT / SUCCESS消息)
contactUS.blade.php
@extends('layout.app')
@section('content')
<div id="page">
<div id="publish">
<div class="frameterms">
<h1>Contact</h1>
<script src='https://www.google.com/recaptcha/api.js'></script>
@if(Session::has('success'))
<div class="notify yellow" style="display:block;">
{{ Session::get('success') }}
</div>
@endif
{!! Form::open(['route'=>'contactus.store']) !!}
<div class="row">
<label>Name<span class="asterix">*</span></label>
</div>
<div class="row {{ $errors->has('name') ? 'has-error' : '' }}">
{!! Form::text('name', old('name'), ['class'=>'row', 'placeholder'=>'Enter Name']) !!}
<span class="text-danger">{{ $errors->first('name') }}</span>
</div>
<div class="row {{ $errors->has('email') ? 'has-error' : '' }}">
<label>Email<span class="asterix">*</span></label>
{!! Form::text('email', old('email'), ['class'=>'row', 'placeholder'=>'Enter Email']) !!}
<span class="text-danger">{{ $errors->first('email') }}</span>
</div>
<div class="row {{ $errors->has('message') ? 'has-error' : '' }}">
<label>Subject<span class="asterix">*</span></label>
<div class="selector">
<div class="selector1">
{!! Form::select('subject', array(
'Select subject...' => 'Select subject...',
'Web' => 'Web development',
'Marketing' => 'Marketing',
'App' => 'App development',
'Advertising and Promotion' => 'Advertising and Promotion',
'Other' => 'Other') ) !!}</div>
<div>
<span class="text-danger">{{ $errors->first('message') }}</span>
</div>
<div class="row {{ $errors->has('message') ? 'has-error' : '' }}">
<label>Message<span class="asterix">*</span></label>
{!! Form::textarea('message', old('message'), ['class'=>'row', 'placeholder'=>'Enter Message']) !!}
<span class="text-danger">{{ $errors->first('message') }}</span>
</div>
<div class="row">
<small class="required"><span class="asterix">*</span> Required fields</small>
</div>
<div class="form-group {{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}">
<div class="col-md-6 pull-center">
{!! app('captcha')->display() !!}
@if ($errors->has('g-recaptcha-response'))
<span class="help-block">
<strong>{{ $errors->first('g-recaptcha-response') }}</strong>
</span>
@endif
</div>
</div>
<div class="rowbutton">
<input onclick="$('.loader').show(); $(this).hide();" type="submit" value="Send message">
<div class="loader" style="display:none;"></div>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
@endsection
ContactUSController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\ContactUS;
use Illuminate\Support\Facades\Input;
use Validator;
use Redirect;
class ContactUSController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function contactUS()
{
return view('pages.contactUS');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function contactUSPost(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'subject' => 'required',
'message' => 'required',
'g-recaptcha-response' => 'required|captcha'
]);
ContactUS::create($request->all());
return back()->with('success', 'Thanks for contacting us!');
return redirect()->back();
}
}
web.php
Route::get('contact', 'ContactUSController@contactUS');
Route::post('contact', ['as'=>'contactus.store','uses'=>'ContactUSController@contactUSPost']);
当我填写联系表单时,它会在后端的SQL数据库中添加一个帖子。当失败时,它会返回到联系表单视图。
问题是即使我已经输入了代码,验证器错误和SUCCESS消息也不会显示在视图中。
有人知道如何解决这个问题吗?有什么解决方法吗?任何建议将不胜感激。预先谢谢你。
这是Laravel 5.6.3项目的图片,必填字段正在工作:
这是Laravel 5.7.8项目的图片,必填字段不起作用:
答案 0 :(得分:0)
如下更新您的回复。
return redirect()->back()->with('success', 'Thanks for contacting us!');
也删除最后的退货。
答案 1 :(得分:0)
在ContactUS :: create($ request-> all())行之后,您可以使用
这是我的代码
Session::flash('successMsg','what ever you want to message');
@if( Session::has('successMsg'))
<p class="btn btn-block btn-success disabled successMsg m-b-30">{{
Session::get('successMsg') }}</p>
@endif
进行这样的验证。顶部使用验证器。 使用验证器;
创建一个验证数组,其中您要验证$ request。然后像这样进行验证。在其他部分,编写代码。并在if部分中给出有效消息。
$v = [
'image' => 'image|mimes:png,ico|max:200',
];
$validator = Validator::make($request->all(),$v);
if($validator->fails()){
Session::flash('errorMsg',$validator->errors());
return redirect()->back();
}else{
}
答案 2 :(得分:0)
尝试指定您要在其中显示消息的view
路线,
return redirect('contact')->with('success', 'Thanks for contacting us!');
然后在您的blade
视图中将其显示为:
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
参考:Docs
更新:
从您的评论Why the <div class="row"> do not change to <div class="row has-error"> ?
看来,您似乎在谈论$errors
,因此您需要做的就是检查是否存在错误消息,然后显示如下消息:
如果要在每个字段下显示错误,可以这样做。
@if ($errors->has('firstname'))
<div class="error">{{ $errors->first('firstname') }}</div>
@endif
在新版本的laravel中,它已更改为类似if ($errors->any())
的名称,但是您可以参考文档here。
答案 3 :(得分:0)
根据Laravel 5.7 Documentation
return redirect('contact')->with('success', 'Thanks for contacting us!');
用户重定向后,您可以显示会话中的闪烁消息。例如,使用Blade语法:
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
答案 4 :(得分:0)
好吧,如果您想对必填字段输入错误,则必须这样输入:
{!!形式::文本(“名称”,旧的(“名称”),['类'=>'行','占位符'=>'输入名称','必填']))!!
该键是“必需的”,不带'则不一样。 我仍然不知道该怎么做,正确地发送成功消息。