2017-03-27 53 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/'); 
    } 
} 

这样一来我就能够得到提示信息为模板。