控制器方法未调用

时间:2018-12-03 09:39:07

标签: forms laravel-5

我遇到一个问题,当我提交表单时,我的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错误。

我完全陷入了困境。我想念什么?

3 个答案:

答案 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