在 Laravel 中,注册策略是按照它们在 AuthServiceProvider 提供的 $policies 属性中的顺序执行的。按照文档的说明,确实是从上往下执行的。

如果最后一个策略抛出的异常被前面的策略捕获,可能是因为异常的捕获是在注册策略的调用链中的某个环节进行的。这可能与 Laravel 的异常处理机制以及策略执行的方式有关。

要更具体地解决这个问题,我建议检查以下几个方面:

  1. 异常是否正确地抛出: 确保最后一个策略中的异常确实被抛出,而不是被吞噬或在内部处理。
  2. 异常捕获的地方: 查看异常是在哪里被捕获的。可能有其他地方的异常处理或中间件干预了异常的传递。
  3. 策略的执行流程: 确保策略的执行流程按照你期望的方式进行。可能有其他中间件或拦截器介入导致异常被捕获。
  4. Laravel 版本: 确保你使用的 Laravel 版本没有已知的异常处理或策略执行方面的问题。有时更新 Laravel 到最新版本可以解决一些已知问题。