有没有办法为Response :: json()指定默认参数? 问题是,在我的情况下,Response :: json($ data)返回utf8,因为我需要指定额外的参数才能读取它:
$headers = ['Content-type'=> 'application/json; charset=utf-8'];
return Response::json(Course::all(), 200, $headers, JSON_UNESCAPED_UNICODE);
这很无聊,看起来多余......
答案 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
}
时,您的覆盖将代替默认值运行。由于您的覆盖扩展了内置的默认响应工厂,因此其他所有内容都应相同。