使用Laravel 5,我想发送自定义的abort()
消息。
例如,如果用户没有执行某个操作所需的权限,我想要abort(401, "用户无法执行此操作")
。
目前,当我这样做时,响应文本是HTML页面而不是消息。
如何只返回消息?
注意:我不想传递不同的视图,而只想传递自定义消息。
https://laravel.com/docs/5.4/errors#http-exceptions
abort(500, 'Something went wrong');
使用$exception->getMessage()
在resources/views/errors/500.blade.php
中显示它:
Error message: {{ $exception->getMessage() }}
@section('message', __( $exception->getMessage() ? $exception->getMessage() :'Whoops, something went wrong on our servers.'))
。 - ManojKiran A您可以使用abort将响应包装起来,这将停止执行并返回响应。如果您希望它是JSON格式,则添加->json();
。
# Regular response
abort( response('Unauthorized', 401) );
# JSON response
abort( response()->json('Unauthorized', 401) );
abort( response(['message' => 'Unauthorized'], 401) );
来处理 JSON,代码会更短。 - Christos Lytrasreturn response("User can't perform this action.", 401);
return
会继续执行调用者的操作。而使用abort
,我不想继续进行任何业务逻辑。 - Jānis Elmerisresponse('', 400)->json('some message')
仍然返回HTML页面。 - Jānis Elmerispublic function render($request, Exception $e)
{
return $e->getMessage();
//For Json
//return response()->json(['message' => $e->getMessage()]);
}
{{ $exception->getMessage() }}
Handler.php
文件中,我修改了该函数: public function render($request, Exception $e)
{
$response = parent::render($request, $e);
if (method_exists($e, "getStatusCode")) {
if ($e->getStatusCode() == 401) {
$response->setContent($e->getMessage());
}
}
return $response;
}
如果你正在编写API而不是使用默认的abort()异常错误,我认为这非常干净:
abort( response()->json(["message"=>"an error occur"], Response::HTTP_NOT_FOUND) );
api.php
文件中添加以下内容。 Route::fallback(function () {
return abort(401,"User can't perform this action.");
});
首先,在您的头文件或想要显示消息的页面中添加错误消息,例如:
@if($errors->has())
@foreach ($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
@endif
public function store(){
if(user is not permitted to access this action) // check user permission here
{
return redirect()->back()->withErrors("User can't perform this actions");
}
}
您可以通过错误消息进行重定向
abort($code, $message)
(前提是$request->wantsJson()
)时,它会自动返回一个包含您的消息的 JSON 格式化错误。 - amphetamachine