2009-12-03 4 views
26

간단한 C (CRUD) 기능을 가지고 있으며 작성한 "삽입"기능에서 내 리디렉션과 함께 메시지 (오류 또는 성공)를 보내고 싶습니다. . 리디렉션을 사용하여 POST 필드를 지정할 수 있습니까? 의사 코드에서CodeIgniter에서 리디렉션과 함께 데이터 보내기

내가 가진 : 때

function view_all{ 
    //set up some initial variables 
    $this->load->view(viewing_page, $data) 
} 

function insert{ 
    if ($this->db->insert(my_table, $_POST)){ 
     $message = "All's well"; 
    } 
    else { 
     $message = "whoops!"; 
    } 
    redirect(view_all); 
} 

그래서 이상적으로 viewing_page이

if (isset($message)){ 
    echo $message 
} 

같은 것을 할 것이다 그래서를 통해 처음에, 내가 어떤 메시지가 표시되지 않습니다/삽입이 있으면 같은 페이지에 메시지가 나타납니다. 감사!

답변

32

redirectheader()입니다. 그렇다면 위치 헤더와 함께 데이터를 보낼 수 있다고 생각하지 않습니다. 세션 URL을 사용하거나 위치 문자열에 쿼리 문자열을 추가하여 (동일하지 않음) 동일한 작업을 수행 할 수 있습니다.

CodeIgniter에서이 작업을 수행하는 '수락 된'방법은 session class 문서 페이지의 중간 부분을 조금 더 살펴보십시오.

CodeIgniter는 "flashdata"또는 다음 서버 요청에서만 사용할 수있는 세션 데이터를 지원하고 자동으로 지워집니다. 이들은 매우 유용 할 수 있으며 일반적으로 정보 또는 상태 메시지에 사용됩니다 (예 : "레코드 2 삭제됨").

여기 (이제 삭제됨 - 여기는 archived version입니다.) post on flash messages은 검색어 문자열과 세션 var 메소드를 모두 포함합니다.

업데이트가 :

header('Location: http://www.example.com/index.php?message='.urlencode($message)); 

그리고이 프레임 워크를 사용하여 변수는 '플래시'를 설정 : 지금은 삭제 된 게시물을 요약하면, 그것은 모두 메시지에는 urlencoding 및 쿼리 문자열로 (포스트에서 예)를 추가했다 (포스트에서 예) :

: 물론

//Zend Framework 
$flashMessenger = $this->_helper->FlashMessenger; 
$flashMessenger->setNamespace('actionErrors'); 
$flashMessenger->addMessage($message); 

//CakePHP 
$this->Session->setFlash('Your post has been saved.'); 
$this->redirect('/news/index'); 

당신이 대략 직접 $_SESSION를 사용하여 동일한 것 (내 예를) 할 수있다

//first request 
$_SESSION['flash'] = 'This is a simple flash message.'; 
//next request 
$flash = $_SESSION['flash']; 
unset($_SESSION['flash']); //flash is one time only 
+1

아, 좋은 정보, 감사합니다. 그들의 문서는 정말 훌륭하지만 너무 오래되었습니다 ... –

+0

CI가 가지고있는 URI 라우팅에 지저분한 쿼리 문자열을 사용하지 않는 한 세션을 수행하는 유일한 방법입니다. 이 답변 +1. – Jessedc

+1

Jessedc와 마찬가지로 세션 만이 유일한 방법입니다. 이 응용 프로그램 유형에 플래시 데이터를 사용합니다. 일반적으로 플래시 데이터를 설정합니다. 리디렉션입니다. 또한 사용자가 데이터를 다시 제출하지 못하게합니다. –

26

플래시 데이터를 CI Session Class에서 사용할 수 있습니다. 이 문서에서 말했다 무슨이다 :

CodeIgniter는 단지 다음 서버 요청에 대한 사용할 수, 자동 클리어 후입니다 것 "flashdata", 또는 세션 데이터를 지원합니다. 이는 매우 유용 할 수 있으며 일반적으로 정보 또는 상태 메시지 (예 : "레코드 2 삭제됨")에 사용됩니다.

참고 : 플래시 변수의 앞에는 "flash_"가 붙어 있으므로 자신의 세션 이름에이 접두어를 사용하지 마십시오.또한 set_userdata()와 동일한 방식으로, set_flashdata()에 배열을 전달할 수 있습니다

$this->session->set_flashdata('item', 'value'); 

:

는 flashdata를 추가합니다.

는 flashdata 변수를 읽으려면 : 당신은 당신이 추가 요청을 통해 flashdata 변수를 유지해야한다는 것을 발견하면

$this->session->flashdata('item'); 

을, 당신은 그래서 keep_flashdata() 기능을 사용 할 수 있습니다.

$this->session->keep_flashdata('item'); 
0

나는 CodeIgniter가 로그 아웃시 현재 세션을 파괴한다는 점을 지적하고자합니다. 따라서 플래시 또는 세션 저장소를 사용할 수 없기 때문에 "로그인/로그 아웃"행을 따라 메시지를 전달하기가 더 어려워집니다. 로그인 상태와 아웃 상태간에 전환 할 때 메시지를 전달해야하는 경우 memcached을 사용하는 것이 좋습니다. 위에 언급 된 다른 옵션은 using URL query stringssetting cookies입니다.

관련 문제