【问题标题】:Method on redirect()-to()redirect()-to() 上的方法
【发布时间】:2019-05-02 23:13:59
【问题描述】:

我是 Laravel 的新手!!

我有一个向我的控制器发送 DELETE 请求的 js:

   $.ajax({
                 url: link,
                 method: 'DELETE',
                 data: {
                      _token: $('input#_token').val(),
                 },

比我的控制器返回重定向

public function destroy(User $user)
{
    $this->repository->delete($user->id);

    return redirect()->to(route('users.index'));
}

这个路由“users.index”有“GET”方法,但是重定向考虑的是DELETE方法,导致这个错误:

DELETE http://localhost:8000/users 405(方法不允许)

我可以改变使用重定向的方法吗?

谢谢!

【问题讨论】:

标签: php laravel controller request


【解决方案1】:

Ajax 请求将始终遵循重定向 (actually, there's a work around),因此如果这是一个 ajax 请求,您可能应该更改控制器以避免重定向。

use Illuminate\Http\Request;

# [...]

public function destroy(Request $request, User $user)
{
    $this->repository->delete($user->id);

    if ($request->ajax()) {
        return $user;
    }

    return redirect()->to(route('users.index'));
}

如果这个控制器只接收ajax请求,你可以让它更简单。

public function destroy(Request $request, User $user)
{
    $this->repository->delete($user->id);

    # or return whatever you want with: response()->json($contents);
    return $user;
}

[更新] 在 ajax 之后进行重定向

正如@PatricQ 提到的,您可能希望在 ajax 调用之后进行重定向。如果是这种情况,我建议您创建一个您的 javascript 可以理解的响应格式并进行重定向。

一个例子是返回重定向 URL:

return response()->json(['redirect' => true, 'to' => route('users.index')]);

这样,在您的 javascript 中,您将检查重定向标志。

$.ajax({
    url: link,
    method: 'DELETE',
    data: {
        _token: $('input#_token').val(),
    },
    success: function (response) {
        if (response.redirect) {
            window.location.href = response.to;
        }
    },
});

【讨论】:

  • 我相信 OP 想要 进行重定向,而不是使用 DELETE 请求方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2013-05-03
  • 2022-11-20
  • 2015-05-31
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多