我的BaseController
中有一个方法(这里简化了以避免因不重要的细节而分心):
protected function handle_empty($report) {
if (count($report) == 0) {
return Response::make('Error: that report does not have any data available.', 404, array());
}
}
它旨在用于许多不同的控制器方法来处理我从JSON生成报告的情况,并且我已经获得了JSON而没有任何报告数据。
我希望能够在(例如)ScandownController
的{{1}}方法(以及createHTML()
和createPDF
方法中使用它,以及所有方法在我必须生成的十几个其他报告的所有其他控制器中使用相同的方法,我想在一行中完成,最好是这样:
createXL
这(当然!)不起作用,因为$this->handle_empty($report);
返回 a handle_empty
。无论如何我可以直接从那里渲染它吗?类似的东西:
Response
我不想将protected function handle_empty($report) {
if (count($report) == 0) {
# NOTE: *render* instead of *return*:
render Response::make('Error: that report does not have any data available.', 404, array());
}
}
/ if
子句复制并粘贴到每个报告的then
方法,createHTML
方法和createPDF
方法中,因为那只是一种可怕的做法。我有一个解决方法,允许我在每个报告生成方法中使用一行,但它是丑陋的,并没有更好。
createXL
那么Laravel立即呈现的是什么,而不是仅仅将值返回给路由器调用的方法?
我根据Googling找到的内容尝试了这个(有和没有回声),它没有用:
if ($this->is_defective($report)) { return $this->bail(); }
<小时/> 更新 :
我试图仅包含有助于解释问题的详细信息,并包含所有有用的细节,但如果所有前面的信息对您没有意义,那么问题归结为:
Response::make('blah blah', 404, array())->render();
或View
,而不仅仅Response
将其转换为控制器操作return
1}}。答案 0 :(得分:3)
定义扩展Exception
的新Exception类。说,class YourNameSpace\CustomException extends Exception {}
。
从YourNameSpace\CustomException
handle_empty()
protected function handle_empty() {
if (count($report) == 0) throw new YourNamespace\CustomException;
}
处理App :: error中的异常。 (在app/start/global
)
App::error(function(YourNamespace\CustomException $exception)
{
// Handle the exception...
return Response::make('Error: that report does not have any data available.', 404, array());
});
确保它出现在App::error(function(Exception $exception){});
处理程序之前。