【发布时间】:2016-07-26 09:03:33
【问题描述】:
使用 Laravel 5,我想发送自定义 abort() 消息。
例如,如果用户没有操作所需的权限,
我想abort(401, "User can't perform this actions")。
目前,当我这样做时,响应文本是 HTML 页面而不是消息。
我怎样才能只返回消息?
注意:我不想传递不同的视图,而只想传递自定义消息。
【问题讨论】:
使用 Laravel 5,我想发送自定义 abort() 消息。
例如,如果用户没有操作所需的权限,
我想abort(401, "User can't perform this actions")。
目前,当我这样做时,响应文本是 HTML 页面而不是消息。
我怎样才能只返回消息?
注意:我不想传递不同的视图,而只想传递自定义消息。
【问题讨论】:
根据 Laravel 5.4 文档:
https://laravel.com/docs/5.4/errors#http-exceptions
您可以使用abort 助手和响应文本:
abort(500, 'Something went wrong');
并在resources/views/errors/500.blade.php 中使用$exception->getMessage() 来显示它:
Error message: {{ $exception->getMessage() }}
【讨论】:
@section('message', __( $exception->getMessage() ? $exception->getMessage() :'Whoops, something went wrong on our servers.'))
您可以将响应包装在 abort 中,这将停止执行并返回响应。如果您希望它是 JSON,请添加 ->json();
# Regular response
abort( response('Unauthorized', 401) );
# JSON response
abort( response()->json('Unauthorized', 401) );
【讨论】:
abort( response(['message' => 'Unauthorized'], 401) );,则更短。
答案是简单地使用 response() 辅助方法而不是 abort()。语法如下。
return response("User can't perform this action.", 401);
【讨论】:
return 将继续执行调用者。对于abort,我不想继续任何业务逻辑。
response('', 400)->json('some message') 仍然返回 HTML 页面。
你可以在这里处理所有的错误异常 app/Exceptions/Handler.php 类根据你的要求。
在你的情况下,只需用这个替换渲染函数
public 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;
}
【讨论】:
首先在你的头文件或者你想要显示消息的页面中添加错误信息,比如:
@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");
}
}
您可以使用错误消息重定向回来
【讨论】: