当前位置: 首页 > 知识库问答 >
问题:

当从view composer引发自定义Laravel异常时,未调用方法render()

家弘业
2023-03-14

已编辑:我对render方法有一个自定义异常,当我抛出它时(例如从控制器中)会调用该异常,但当我在View composer中抛出它时,不会调用该异常。

所以当我这样做的时候

public function compose(View $view)
{
    throw new CustomException();
}

并将dd()置于异常呈现方法

public function render()
{
    dd('render is called');
}

我没有得到任何结果。

如果我直接记录我的异常,会发现首先抛出的是CustomException,然后会看到ErrorException。

我找到了一个扔它的地方。

\照明\查看\引擎\CompilerEngine::handleViewException

protected function handleViewException(Exception $e, $obLevel)
{
    $e = new ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);

    parent::handleViewException($e, $obLevel);
}

我在Laravel文档中没有发现任何关于该案件的提及。我在github上发现了同样的问题:https://github.com/laravel/framework/issues/24658

所以问题是,这是预期的吗?有没有足够的方法来避免这种行为?

共有2个答案

南宫喜
2023-03-14

所以我为自己找到了可行的解决方案。我已经扩展了CompilerEngine并添加了额外的处理,以便在我不想抛出ErrorException时不会抛出。重要的是,生成的异常必须继承自ErrorException。否则,您将面临多个调用,这些调用可能会中断您的逻辑并将多个日志实体写入日志文件

甄志
2023-03-14

编辑

因此,正如您所知,视图编译过程中的任何异常都会被截获,并作为错误异常(ErrorException)或FatalThrowableError重新提交。

你所能做的就是拦截错误异常并检查是否($e-

 类似资料:
  • 假设我有以下代码行, 我的代码为: 现在发生的情况是,当编译器到达}catch(final SQLException se){时,它没有转到它的catch主体,只是脱离了,不知道为什么吗?

  • 我用Spring5反应式编写了一个自定义异常 我把这个叫做服务: 但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息? AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗? 这是我的控制器: 谢谢

  • 我有一个注释表和用户表,其关系为:user- 我的其他模型没有任何问题与Has很多关系,然而,评论模型有一个问题,我尝试的每一件事(即使我使用Has很多只是为了看看它是否会有不同的错误)。 下面是注释模型。 以下是用户表: 这是评论表 最后,当我调用$comment时- 谢谢

  • 是否可以在使用非预定义参数调用模拟时引发异常?有答案。返回\u SMART\u null,但这并不是我真正需要的,因为如果null是合法的返回值,它就不起作用,这不会导致NullPointerException,而是以后出错。 编辑:一些背景。因此,在Mockito中,当您定义一个mock时,您可以如下所示为每个调用指定返回值: 当<代码>myMock时。someMethod是用参数调用的,我在测

  • 我的处理程序方法 当从Enum元数据抛出自定义异常时,流不会在自定义处理程序上出现,而不是它将转到httpMessageNonReadableException,这是其他覆盖方法,因此当我调试它的原因时,它会显示ValueInstantiationException。 我希望我的自定义异常方法应该运行,而不是HttpMessageOnReadableException

  • 这是一个windows表单应用程序,我在其中有一个特定的表单。在这个表单上,我显示了一些应该在后台异步发生的处理的进度。所有这些都很好,除了当我尝试处理后台处理中捕获的异常时…… 这是表单代码中调用Async函数的子函数,该函数位于包含所有后台处理代码的模块中: 这是它调用的异步函数,它位于一个单独的模块中: 这是由异步函数调用的常规sub: 当我使用我知道最终会在子B中生成错误的数据运行此代码时