Laravel 5:自定义abort()消息

时间:2016-07-26 09:03:34

标签: php laravel laravel-5

使用Laravel 5,我想发送自定义abort()消息 例如,如果用户没有操作所需的权限,则 我想abort(401, "User can't perform this actions") 目前,当我这样做时,响应文本是HTML页面而不是消息 我怎样才能只返回消息?

注意:我不想传递不同的视图,只能传递自定义消息。

7 个答案:

答案 0 :(得分:10)

根据Laravel 5.4文档:

https://laravel.com/docs/5.4/errors#http-exceptions

您可以在响应文字中使用abort帮助:

abort(500, 'Something went wrong');

并使用$exception->getMessage()中的resources/views/errors/500.blade.php来显示它:

Error message: {{ $exception->getMessage() }}

答案 1 :(得分:6)

答案只是使用response()辅助方法而不是abort()。语法如下。

return response("User can't perform this action.", 401);

答案 2 :(得分:1)

您可以在此处理所有错误例外app / Exceptions / Handler.php Class根据您的要求。

在你的情况下,只需用这个

替换渲染功能
public function render($request, Exception $e)
{
   return $e->getMessage();
   //For Json
   //return response()->json(['message' => $e->getMessage()]);
}

答案 3 :(得分:1)

应该能够在模板中使用以下内容:

{{ $exception->getMessage() }}

答案 4 :(得分:1)

您可以将响应包装在abort中,这将停止执行并返回响应。如果您希望它为JSON,则添加->json();

# Regular response
abort( response('Unauthorized', 401) );

# JSON response 
abort( response()->json('Unauthorized', 401) );

答案 5 :(得分:0)

首先在您的标题文件或要显示消息的页面中添加错误消息,如:

@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");
    }
}

您可以使用错误消息重定向

答案 6 :(得分:0)

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;
}