【问题标题】:Laravel 5: Custom abort() messageLaravel 5:自定义 abort() 消息
【发布时间】:2016-07-26 09:03:33
【问题描述】:

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

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

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:

根据 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() }}

【讨论】:

  • 这将是正确的方法,但是我如何在此消息中添加“换行符”字符或换行符(或更好的项目符号)?
  • @blamb 如果邮件包含 HTML 代码(如
    ),请使用 {!! !!} 语法而不是 {{ }} 来显示未转义的内容。
  • 在 laravel 5.7 @section('message', __( $exception->getMessage() ? $exception->getMessage() :'Whoops, something went wrong on our servers.'))
【解决方案2】:

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

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

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

【讨论】:

  • 如果我们对 JSON 使用数组消息 abort( response(['message' => 'Unauthorized'], 401) );,则更短。
【解决方案3】:

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

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

【讨论】:

  • 但是,return 将继续执行调用者。对于abort,我不想继续任何业务逻辑。
  • 哦,这也不起作用,至少在我的应用程序中没有。 response('', 400)->json('some message') 仍然返回 HTML 页面。
【解决方案4】:

你可以在这里处理所有的错误异常 app/Exceptions/Handler.php 类根据你的要求。

在你的情况下,只需用这个替换渲染函数

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

【讨论】:

  • 我试过了,但是浏览器里的.catch 上不了。
  • 我没听懂“它不会到达浏览器中的 .catch”的意思
  • 使用 Promise:promise.then(this._thenMethod).catch(this._defaultCatcher);
  • 好的。我不确定,但尝试像这样以 json 形式发送响应 return response()->json(['message' => $e->getMessage()]);
【解决方案5】:

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

{{ $exception->getMessage() }}

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      首先在你的头文件或者你想要显示消息的页面中添加错误信息,比如:

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

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

      【讨论】:

      • 我应该补充一点,我说的是 $.ajax 调用,而不是浏览器重定向。
      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 2017-08-17
      • 1970-01-01
      • 2014-08-13
      • 2014-05-31
      • 2017-06-28
      • 2017-12-13
      • 2017-01-08
      相关资源
      最近更新 更多