簡體   English   中英

在php構造函數中實現try / catch塊

[英]Implementing a try/catch block in php constructor function

我有一個try-catch塊查詢。 我將創建對象,如果失敗,它將引發錯誤消息或在其他頁面上重定向。

function __construct() {
        try{ 
            $this->ServiceObj = AnyClass::getService('XXX');
          }
        catch{
            return Redirect::to('/');
        }
    } 

public function MyOwnFunction() {

    $getValueofCode = $this->_ServiceObj->set($endPoint_Url); //it's only example method not want to set anything
 }

這是在構造函數中定義和使用try catch塊的正確方法嗎? 我可以在建築中使用試擋塊嗎? 如果沒有 ,有沒有比這更好的方法了?

提前致謝!!!

您絕對可以在構造函數中使用try catch,只是不要忘記像catch (\\Exception $e)這樣指定要捕獲的異常類。 但是,Laravel將不會處理返回的重定向。 (通過定義構造函數甚至不應該返回任何東西)

一個簡單的解決方法是在重定向上調用send() 這將立即將其返回給客戶端並停止該應用程序。

try{ 
    $this->ServiceObj = AnyClass::getService('XXX');
}
catch(\Exception $e){
    Redirect::to('/')->send();
}

但是,由於您提到了登錄頁面,因此最好使用before過濾器進行檢查和重定向。 就像內置的auth過濾器一樣。

第三種解決方案是App::error app/start/global.php您可以執行以下操作:

App::error(function(FooBarException $exception)
{
    return Redirect::to('/');
});

當然,這僅在您的異常足夠具體時才起作用(將FooBarException替換為您要捕獲的異常)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM