【问题标题】:Submit button doesn't call controller function - Laravel提交按钮不调用控制器功能 - Laravel
【发布时间】:2020-09-07 20:48:02
【问题描述】:

我正在尝试创建一个表单来存储一些数据。但是,当我单击提交按钮时,除了刷新页面之外什么都没有发生。请求被触发(显示在 DevTools -> Network 中)。路线应该没问题,因为它在一小时前可以工作,现在不行了。我从表单中删除了每一个输入,只是为了看看它是否可以从控制器调用 store 函数。但是,没有运气。

形式:

<form method="POST" action="{{route('bookings.store')}}" enctype="multipart/form-data">
            @csrf

<input type="submit"/>
</form>

控制器(应该只在页面上打印字符串,但不应该):

public function store(Request $request)
    {
        $this->validate($request, [
            'nume' => 'required',
            'description' => 'required'
        ]);

        return "wtf";

路线列表:

| Domain | Method    | URI                     | Name             | Action                                                                 | Middleware   |
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD  | /                       |                  | Closure                                                                | web          |
|        | GET|HEAD  | about                   | about            | App\Http\Controllers\PageController@about                              | web          |
|        | GET|HEAD  | api/user                |                  | Closure                                                                | api,auth:api |
|        | POST      | bookings                | bookings.store   | App\Http\Controllers\BookingController@store                           | web,auth     |
|        | GET|HEAD  | bookings                | bookings.index   | App\Http\Controllers\BookingController@index                           | web          |
|        | GET|HEAD  | bookings/create         | bookings.create  | App\Http\Controllers\BookingController@create                          | web,auth     |
|        | PUT|PATCH | bookings/{booking}      | bookings.update  | App\Http\Controllers\BookingController@update                          | web,auth     |
|        | GET|HEAD  | bookings/{booking}      | bookings.show    | App\Http\Controllers\BookingController@show                            | web          |
|        | DELETE    | bookings/{booking}      | bookings.destroy | App\Http\Controllers\BookingController@destroy                         | web,auth     |
|        | GET|HEAD  | bookings/{booking}/edit | bookings.edit    | App\Http\Controllers\BookingController@edit                            | web,auth     |

【问题讨论】:

  • 你能发布网络请求吗?也许是控制台的图片或列表?
  • 感谢您的快速回复,截图如下:imgur.com/a/pac2jpo
  • 也许验证抛出异常但你没有捕捉到空白页。当您尝试提交表单作品时,请输入 dd($request->all());或 smt.到您的控制器顶部。否则没有人现在不能从空白页中获得任何东西。

标签: php laravel


【解决方案1】:

使用提供的代码,我看到的错误是控制器中的$this-&gt;validate() 函数调用失败,因此它必须抛出ValidationException

当抛出验证异常,并且没有使用 try{} catch{} 时,默认行为由 Laravel 的 Handler 类决定:

  • 第 203-205 行:如果抛出的异常是 ValidationException。
  • 第 254-263 行:调用 invalid() 获取 HTML 或调用 invalidJson() 获取 JSON 响应。
  • 第 272-277 行(如果调用了 invalid()):重定向回来并在会话中闪现错误。
  • 第 286-292 行(如果调用 invalidJson()):返回带有错误的 JSON 对象。

在了解了 ValidationException 的工作原理之后,现在查看您的代码,我们知道验证失败,因此,您被“重定向回”(看起来像是刷新)并且没有打印任何错误,因为它们是在会话中闪现。

你能做什么?

要查看错误,您可以打印它们,这是在here 中解释的。要通过验证,只需再次添加表单输入 :)

【讨论】:

  • 这就是问题所在。谢谢!我更改了表单中的一些输入并忘记修改验证。我认为问题出在 HTML 部分,因为我没有看到控制器被调用。
猜你喜欢
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多