【发布时间】:2018-02-13 13:10:45
【问题描述】:
我在将 ajax 发送到电子邮件时遇到了一些问题。 我需要输出错误 json,因为如果我将字段留空或不正确,它会返回“错误:无法处理的实体” 我遇到的更大问题是它不发送电子邮件并返回 500 错误,但如果我要对其进行一些配置并且只发送名称,它就可以正常工作。
Mail.blade.php 这是一个简单的格式
<h1>{{ $name }}</h1>
<h1>{{ $message }}</h1>
<h1>{{ $email }}</h1>
EmailController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Mail;
class EmailController extends Controller {
public function basic_email(Request $request){
$this->validate($request, [ 'name' => 'required', 'email' => 'required|email', 'message' => 'required' ]);
ContactUS::create($request->all());
Mail::send('emails.mail',
array(
'name' => $request->get('name'),
'email' => $request->get('email'),
'message' => $request->get('message')
), function($message)
{
$message->from('test@test.com');
$message->to('test@test.com', 'Admin')->subject('Feedback');
});
return response()->json('success', 'Thanks for contacting us!');
}
}
request.php
<?php
class ContactFormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'email' => 'required|email',
'message' => 'required',
];
}
}
联系.Blade.PHP
<html>
<head>
<title>Test</title>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<meta name="csrf-token" content="{{ csrf_token() }}" />
<script>
function getMessage(){
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
var name = $('.namebox').val();
var email = $('.namebox2').val();
var message = $('.namebox3').val();
$.ajax({
type:'post',
url:'/sendbasicemail',
data: {_token: CSRF_TOKEN, name: name, email: email, message: message},
dataType: 'JSON',
success:function(data){
alert("DONE");
console.log(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown, request) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
console.log(name, email, message);
}
});
}
</script>
</head>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
{!! Form::open() !!}
<div class="form-group {{ $errors->has('name') ? 'has-error' : '' }}">
{!! Form::label('Name:') !!}
{!! Form::text('name', '',['class'=>'namebox', 'placeholder'=>'Enter Name']) !!}
<span class="text-danger">{{ $errors->first('name') }}</span>
</div>
<div class="form-group {{ $errors->has('email') ? 'has-error' : '' }}">
{!! Form::label('Email:') !!}
{!! Form::text('email', '',['class'=>'namebox2', 'placeholder'=>'Enter Email']) !!}
<span class="text-danger">{{ $errors->first('email') }}</span>
</div>
<div class="form-group {{ $errors->has('message') ? 'has-error' : '' }}">
{!! Form::label('Message:') !!}
{!! Form::textarea('message', '',['class'=>'namebox3', 'placeholder'=>'Enter Message']) !!}
<span class="text-danger">{{ $errors->first('message') }}</span>
</div>
{!! Form::close() !!}
<body>
<div id = 'msg'>This message will be replaced using Ajax.
Click the button to replace the message.</div>
<?php
echo Form::button('Replace',['onClick'=>'getMessage()']);
?>
</body>
</html>
web.php
Route::get('/ajax',function(){
return view('pages.contact');
});
Route::post('/sendbasicemail','EmailController@basic_email');
顺便说一句,我在外面尝试了一些,所以你可能会注意到一些差异
【问题讨论】:
-
为什么你从两种方法验证第一个是使用验证类和另一个表单请求类。仅在控制器中传递 ContactFormRequest 请求而不是 Request
-
在我添加新请求之前,我遇到了一个问题,它仅在名称字段中弹出“错误:无法处理的实体”。
标签: php jquery ajax laravel laravel-5