我遇到一个问题,当我提交表单时,我的Laravel方法没有被调用。
<form class="form" method="post" action="/contact">
<div class="form__field">
<input id="name" name="name" type="text"><label for="name">Name</label>
</div>
<div class="form__field">
<input id="email" name="email" type="email"><label for="email">Email</label>
</div>
<div class="form__field">
<select id="select-floor" name="select-floor">
<option disabled selected>
I'm interested in floor…
</option>
<option value="basement">
Front house
</option>
<option value="ground-floor">
Ground floor
</option>
<option value="first-floor">
First floor
</option>
<option value="second-floor">
Second floor
</option>
<option value="third-floor">
Third floor
</option>
</select><label class="visually-hidden" for="select-floor">Select floor…</label>
</div>
<div class="form__field">
<textarea name="message"></textarea><label for="message">Message</label>
</div><button class="" type="submit">Send Enquiry</button>
</form>
这是我的路线文件:
Route::get('/contact', function () {
return view('pages/contact', [
'title' => 'Contact',
'description' => ''
]);
});
Route::post('/contact','ContactController@sendEmail');
在我的控制器中,我有:
class ContactController extends Controller
{
public function sendEmail(){
dd('test');
}
}
我期望发生的是输出字符串test
,并且应用程序应该刚刚结束。实际情况是表单页面正在重新加载。
我检查了开发人员控制台,看到419错误,但随后显示的是页面而不是419错误。
我完全陷入了困境。我想念什么?
答案 0 :(得分:0)
首先,请确保您的项目中包含laravelcollective html软件包或将其安装。之后,只需编辑如下所示的表单方法即可:
<form method="post" action="{{ url('/contact') }}">
{!! csrf_field() !!}
在这里,您错过了向表单添加csrf令牌的原因,这就是代码无法正常工作的原因。有关csrf的更多信息,请阅读此csrf owasp
答案 1 :(得分:0)
事实证明,以前的开发人员已经引入了一个JavaScript插件,该插件可以拦截按钮操作并阻止其正确发布。
该插件不再维护,因此我将其删除,并且我的表单开始按预期工作。
答案 2 :(得分:-1)
您尝试更换
<form class="form" method="post" action="/contact">
与
<form method="POST" class="form" action="{{ route('contact') }}" >
@csrf