2017-03-27 71 views
0

我正在2.6.1版本中使用PHP Slim Framework(由於升級PHP沒有更新版本的一些限制),並且在嘗試使用在try/catch塊內的flash消息,當模板被呈現時,消息不會存儲在會話中。狹窄的Flash消息不工作嘗試{} catch(){}

$objValidation = FormValidator::isValidData($post); 

if($objValidation->bolHasError) 
{ 
    $app->flash('objValidation', serialize($objValidation)); 
    $app->flash('selectedData', $post); 
    return $app->redirect('/app/edit/form/components/'); 
} 

但是,如果我開始使用try塊,像下面的話:

例如,(當驗證得到一些錯誤頁面重定向與所需的閃光消息)下面的代碼工作正常閃光燈消息不保存在$ _SESSION(或甚至在{{閃存}}模板):

try { 
    $objValidation = FormValidator::isValidData($post); 

    if($objValidation->bolHasError) 
    { 
     $app->flash('objValidation', serialize($objValidation)); 
     $app->flash('selectedData', $post); 
     return $app->redirect('/app/edit/form/components/'); 
    } 

    # some other stuff processed here... 
} 
catch(Exception $e) { 
    # do something 
} 

PS:會話存儲在PHP自身的方式(在session_start())。

以這種方式使用Flash消息的範圍有任何限制嗎?

+0

您是否正面看到腳本的流程正在通過第二個示例中的$ app-> flass'部分? – amenadiel

+0

@amenadiel是的。我試圖模擬許多種錯誤。在所有情況下,執行該部分代碼時都會達到degug行。我相信最簡單的方法是提出並捕獲一個異常(一旦我無法使用try塊,因爲該塊中有許多數據庫操作。 –

回答

0

我發現try塊創建了一個「隔離範圍」。所以,我試圖在重定向之前放置一個return false以測試下一頁中是否會顯示Flash消息。最後,Flash消息存儲在$ _SESSION變量中(當然重定向沒有執行,但至少我發現問題與try範圍有關)。

然後,我找到的解決方案是引發一個異常,並執行catch塊內的重定向。就像這樣:

$objValidation = FormValidator::isValidData($post); 

if($objValidation->bolHasError) 
{ 
    throw new Exception('validation_error'); 
} 

,然後捕獲錯誤到catch塊:

catch(Exception $e) 
{ 
    if($e->getMessage() == 'validation_error') 
    { 
     $app->flash('objValidation', serialize($objValidation)); 
     $app->flash('formData', $post); 

     return $app->redirect('/api/form/change/components/'); 
    } 
} 

這樣一來我就能夠得到提示信息爲模板。