laravel 写接口的时候,通常会建立 request。在 request 中验证一些参数。这个时候用 postman 或其他请求时候,会发生返回 html 的情况,非 json 格式。该么处理呢。
简单操作一下
TestController.php
public function store(TestRequest $request)
{
$result = $request->only(['name', 'num']);
return response()->json($result)->setStatusCode(201);
}
TestRequest
<?php
namespace App\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
class TestRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$rules = ['name' => ['required', 'regex:/^qq|wechat$/']];
if ($this->name == 'qq') {
$rules = array_merge($rules, [
'qq' => [
'required',
'regex:/^(([1-9])\d{8}$/'
]
]);
} elseif ($this->name == 'wechat') {
$rules = array_merge($rules, [
'wechat' => 'required'
]);
}
return $rules;
}
public function messages()
{
return [];
}
public function attributes()
{
return [
'name' => '名字',
'qq' => 'qq',
'wechat' => '微信'
];
}
}
如果在 request 中验证不通过,请求 Accept 如果没设置 application/json 成这个,会返回 html 数据过来。设置下就好了。 如果语言没配置,返回的是英文的提示。
语言控制使用
composer require overtrue/laravel-lang
# config/app.php 中
# 注释 Illuminate\Translation\TranslationServiceProvider::class,
# 增加 Overtrue\LaravelLang\TranslationServiceProvider::class,
# 设置 'locale' => 'zh_CN',