如果我在请求规则中包含异常,则不同的错误消息



我具有以下模型的更新功能:

public function update(PartnerRequest $request, $id)
{
    $partner = Partner::findOrFail($id);
    if(!$partner -> update($request->all())) {
        throw new HttpException(500);
    }
    return response()->json([
            'status' => 'ok'
        ], 201);
}

这是请求文件:

namespace AppApiV1Requests;
use Config;
use DingoApiHttpFormRequest;
class PartnerRequest extends FormRequest
{
    public function rules()
    {
        return [
               'name' => 'required|unique:partners,' . $this->id . ',id',
               'email' => 'email'    
        ];
    }
    public function authorize()
    {
        return true;
    }
}

如果我在规则上删除了异常并将其作为'name' => 'required|unique:partners',则在重复输入的情况下,我有以下错误消息:

{
  "error": {
    "message": "422 Unprocessable Entity",
    "errors": {
      "name": [
        "The name has already been taken."
      ]
    },
    "status_code": 422
  }
}

但是问题在于补丁程序,我无法更新模型(由于唯一名称规则)。因此,我需要例外。但是,如果我包括它,而不是上述特定错误,我有一个类似的通用错误:

  "error": {
    "message": "SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: partners.name (SQL: update "partners" set "name" = test, "updated_at" = 2017-03-03 10:47:53 where "id" = 3)",
    "code": "23000",
    "status_code": 500
  }
}

路由:

$api->post('partner/store', 'App\Api\V1\Controllers\PartnerController@store');
$api->get('partner/all', 'App\Api\V1\Controllers\PartnerController@index');
$api->get('partner/{id}', 'App\Api\V1\Controllers\PartnerController@show');
$api->patch('partner/{id}', 'App\Api\V1\Controllers\PartnerController@update');

您可以尝试做类似:

的事情
public function rules()
{
    switch ($this->method()) {
        case 'POST':
            return [
                'name' => 'required|unique:partners',
                'email' => 'email'
            ];
        case 'PUT':
        case 'PATCH':
        return [
            'name' => 'required|unique:partners,name,' . $this->route('id') . ',id',
            'email' => 'email'
        ];
    }
}

希望这会有所帮助!

最新更新