在laravel 4过滤器中返回json响应

时间:2014-11-27 13:06:29

标签: php json laravel-4

如果用户未登录,我想在消息中返回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控制器中得到了相同的响应,但它确实有效。

3 个答案:

答案 0 :(得分:1)

您可以通过使用use Illuminate\Support\Facades\Response-documentation Laravel 4 中实现这一目标。看看这个简单的代码段-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'
        ]);
    }
}

答案 1 :(得分:0)

尝试替换此行:

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

这一个:

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

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

答案 2 :(得分:-1)

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

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