如何为Response :: json()指定默认参数

时间:2015-08-18 12:04:17

标签: php laravel

有没有办法为Response :: json()指定默认参数? 问题是,在我的情况下,Response :: json($ data)返回utf8,因为我需要指定额外的参数才能读取它:

$headers = ['Content-type'=> 'application/json; charset=utf-8'];
return Response::json(Course::all(), 200, $headers, JSON_UNESCAPED_UNICODE);

这很无聊,看起来多余......

2 个答案:

答案 0 :(得分:4)

您可以在(基本)控制器中创建一个新方法来设置所有这些标题。

protected function jsonResponse($data) {
    $headers = ['Content-type'=> 'application/json; charset=utf-8'];
    return Response::json($data, 200, $headers, JSON_UNESCAPED_UNICODE);
}

然后在您的控制器路径中返回您的响应:

return $this->jsonResponse(Course::all());

或者你可以创建一个新的UTF8JsonResponse类来扩展默认的Response,设置构造函数中的所有头文件,然后返回return new UTF8JsonResponse(Course::all())

答案 1 :(得分:0)

我知道这个问题很旧,但是有些问题很好。

首先创建自己的public类,例如:

ResponseFactory

然后在namespace App\Factories; class ResponseFactory extends \Illuminate\Routing\ResponseFactory { public function json($data = [], $status = 200, array $headers = [], $options = 0) { // If we haven't passed options manually override the default. // You can always change this to always override the default if (func_num_args() < 4) { $options = JSON_UNESCAPED_UNICODE; } return parent::json($data, $status, $headers, $options); } } 中设置容器以在需要响应工厂界面时解析您的AppServiceProvider

ResponseFactory

现在,每当您调用class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // ... Other things $this->app->singleton(ResponseFactory::class, \App\Factories\ResponseFactory::class); } // Rest of class } 时,您的覆盖将代替默认值运行。由于您的覆盖扩展了内置的默认响应工厂,因此其他所有内容都应相同。