1

当我从数据库中删除或创建数据时,我会像这样在会话中保存消息

/**
 * Function that saves the response to the session
 * @param Bool $bResult
 * @param      $sAction
 */
private function storeResultToSession($bResult, $sAction)
{
    Session::forget([
        constResponse::SESSION_KEY_RESULT,
        constResponse::SESSION_KEY_MESSAGE
    ]);

    $sMessage = '';

    switch ($sAction) {
        case constCommon::ACTION_CREATE:
            $sAction = 'create_slide';
            $sMessage = $bResult === constCommon::BOOL_TRUE ? constResponse::SUCCESS_CREATE_SLIDE : constResponse::ERR_CREATING_SLIDE;
            break;
        case constCommon::ACTION_DELETE:
            $sAction = 'delete_slide';
            $sMessage = $bResult === constCommon::BOOL_TRUE ? constResponse::SUCCESS_DELETE_SLIDE : constResponse::ERR_DELETE_SLIDE;
            break;
        default:
            break;
    }

    Session::put([
        constResponse::SESSION_KEY_RESULT  => $bResult,
        constResponse::SESSION_KEY_MESSAGE => $sMessage,
        constResponse::SESSION_KEY_ACTION  => $sAction,
    ]);
}

操作成功后,我window.location.href在前端使用重定向到主页,我将在该主页上烘烤操作的结果。然后使用此方法在页面请求时删除消息

public function getMessageToToast()
{
    if (session()->has(constResponse::SESSION_KEY_RESULT) === false && session()->get(constResponse::SESSION_KEY_RESULT) === null) {
        return null;
    }

    $bResult = session()->get(constResponse::SESSION_KEY_RESULT);
    $sMsg = session()->get(constResponse::SESSION_KEY_MESSAGE);
    $sAction = session()->get(constResponse::SESSION_KEY_ACTION);

    Session::forget([
        constResponse::SESSION_KEY_RESULT,
        constResponse::SESSION_KEY_MESSAGE,
        constResponse::SESSION_KEY_ACTION
    ]);
    Session::put([
        constResponse::SESSION_KEY_RESULT  => null
    ]);
    Session::save();
    return [
        constResponse::SESSION_KEY_RESULT  => $bResult,
        constResponse::SESSION_KEY_MESSAGE => $sMsg,
        constResponse::SESSION_KEY_ACTION  => $sAction
    ];
}

但是 Session 表现得很奇怪,它只会在 2-3 页面重新加载或重定向后忘记这些项目。

4

0 回答 0