将JavaScript添加到PHP表单将抛出Symfony Component HttpKernel Exc

Adding JavaScript to PHP form throws Symfony Component HttpKernel Exception MethodNotAllowedHttpException

本文关键字:Symfony Component HttpKernel Exc 表单 JavaScript 添加 PHP      更新时间:2023-09-26

我必须为类分配做一个php表单。然后,我们不得不使用另一种语言修改表单,使其更有功能。

我决定添加JavaScript,以便用户可以添加多个部分。在我添加了JavaScript之后,我现在得到了这个错误:

Symfony ' Component ' HttpKernel ' Exception ' MethodNotAllowedHttpException

格式如下:

{{ Form::open() }}
@for ($i=0; $i < 10; $i++)
<input type="number" name="part_number" placeholder="Part Number" />
<input type="number" name="quantity" placeholder="Quantity" />
<input type="number" name="annual_usage" placeholder="Annual Usage" />
<input type="submit" value="Add Part" />
@endfor
<input type="textarea" name="comment" placeholder="Comment" />
<input type="text" name="shippingaddress" placeholder="Shipping Address" />
<input type="text" name="project_id" placeholder="Project Id" />
<input type="text" name="user_id" placeholder="User Id" />
<input type="submit" value="Send Requests" />
{{ Form::close() }}

这不是关于JavaScript,相反,Laravel使用POST方法默认提交表单,MethodNotAllowedHttpException发生时,你在你的应用程序(基本上在routes.php文件)声明路由使用一种方法(GET, POST, DELETE等),但使用不同的方法提交表单。

确保表单提交的路由和表单中使用的方法是相同的。如果你没有在表单中明确地提到一个方法,那么默认情况下它将是POST,你可以使用不同的方法,像这样:

{{ Form::open( array( 'action' => 'Controller@method', 'method' => 'GET') ) }}

或者像这样:

{{ Form::open( array( 'route' => 'routename', 'method' => 'GET') ) }}

或者像这样:

{{ Form::open( array( 'url' => 'your/url', 'method' => 'GET') ) }}

为了更清楚,如果你用这样的方式声明了一个路由:

Route::get(...);

然后在表单中使用GET方法,或者使用其他方法,但如果使用post(),则不需要在表单中使用任何方法。在Laravel网站上查看更多信息。

同样你的循环是不正确的,你的输入有相同的名字,所以最后一个将覆盖前面的,你将只得到一个输入每个名字,使用数组符号在name.

我没有看到任何javascript在你的形式,但不管javascript单独不会导致这种情况。这个错误是说,"你试图用不正确的HTTP方法访问路由",基本上你试图POST到一个只允许GET访问的路由。

默认情况下,Laravel表单将使用POST。您可以尝试将表单上的方法更改为GET:

{{ Form::open([ 'method' => 'GET' ]) }}

但实际上它应该是你在app/routes.php文件中为你想要访问的路由定义的任何内容。

作为题外话,当表单实际提交时,这些输入将相互覆盖,因为它们在for循环中重复时会产生名称冲突:

<input type="number" name="part_number" placeholder="Part Number" />
<input type="number" name="quantity" placeholder="Quantity" />
<input type="number" name="annual_usage" placeholder="Annual Usage" />

考虑让他们提交一个数组:

<input type="number" name="part_number[]" placeholder="Part Number" />
<input type="number" name="quantity[]" placeholder="Quantity" />
<input type="number" name="annual_usage[]" placeholder="Annual Usage" />