Write the Code. Change the World.

7月 30

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',

https://github.com/overtrue/laravel-lang

发表评论

电子邮件地址不会被公开。 必填项已用*标注