【问题标题】:Return json response in laravel 4 filter在 laravel 4 过滤器中返回 json 响应
【发布时间】:2015-01-26 02:22:56
【问题描述】:

如果用户未登录,我想返回带有消息的 401 错误。这是我的过滤器和将应用它的路由:

Route::filter('auth', function() {
  if (!Auth::check())
    {
      return Response::json(array('flash' => 'Please log in.'), 401);
    } 
});

Route::get('/books',  array('before' => 'auth', function() {
...
}));

我从教程中复制了代码,所以基本上它应该可以工作。但是我收到了这个错误:

"NetworkError: 500 Internal Server Error - http://localhost:8000/books"
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":
"Call to   undefined method Illuminate\\Http\\Response::json()","line 42"

不能使用过滤器返回 JSON 对象吗?

编辑: 我在我的一个 Laravel 控制器中也有相同的响应,并且可以正常工作。

【问题讨论】:

  • 你没看到它试图调用未定义的方法吗?检查它是否存在于该特定类中,以及您是否正在加载正确的命名空间。
  • 您正在尝试调用未定义的方法。请张贴定义此方法的部分。
  • 我不明白你的意思。我正在使用 laravel 的特殊响应。所以我认为我不必定义函数。见:laravel.com/docs/4.2/responses#special-responses

标签: php json laravel-4


【解决方案1】:

您可以在 Laravel 4 中使用 use Illuminate\Support\Facades\Response - documentation 实现这一点。看看这个简单的代码 sn-p - return Response::json([]);

在过滤器中的使用:

Route::filter('auth', function() {
    if (!Auth::check()) {
        return Illuminate\Support\Facades\Response::json([
             'flash' => 'Please log in.'
        ], 401);
    }
});

在控制器中的使用:

namespace App\Controllers;

use Illuminate\Support\Facades\Response;

/**
 * Class ReportController
 * @package App\Modules\Moderation\Controllers
 */
class ExampleController extends BaseController
{

    // ################### class methods // ###############################

    /**
     * Create post action
     * @return mixed
     */
    public function someAction()
    {
        return Response::json([
            'id' => 1337,
            'name' => 'Bob',
            'gender' => 'male'
        ]);
    }
}

【讨论】:

    【解决方案2】:

    尝试替换这一行:

    return Response::json(array('flash' => 'Please log in.'), 401);
    

    有了这个:

    return Response::json(array('flash' => 'Please log in.', 401));
    

    我相信 jsno 方法接受一个数组,而你提供了一个数组和第二个参数。

    【讨论】:

    • 不幸的是,这不起作用。我得到了同样的错误。但我在我的一个 Laravel 控制器中有相同的代码,并且它在那里工作。
    【解决方案3】:

    我不知道为什么我可以在我的控制器中使用 Response.json(),但不能在我的过滤器中使用。但在 API 中,我看到了 JsonResponse,这对我有用:

    return JsonResponse::create(array('flash' => 'Please log in.'), 401);
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2017-01-28
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多