묻고답하기
controller 에서 html 로 context::set 사용... 제가 어디가 틀린걸까요 ㅠㅠ
2014.06.19 15:54
아래의 코드와 같습니다.
현재 학습용으로 모듈을 하나 작게 만들고 있습니다. (작년에 쉬고 다시 만지니깐 너무 버벅이네요... 작은 모듈하나 만드는데 1달이 넘게 걸렸네요 ㅠㅠ)
거의 다 만들었는데 이거 검색기능을 구현하고 싶어서 관리자화면을 구성중입니다.
관리자화면(search.html)에서 검색 키워드를 입력하는 form 이 있는 곳 바로 아래에 결과값을 받아서 출력해주기 위해 search.html 를 작성했습니다.(관리자의 귀차니즘을 지양하는 저...)
원래 view페이지에서 아래의 controll파일과 model 파일의 코드를 한곳에 다 때려넣고 실험했을때는 별 문제없이 검색결과가 나왔는데,
이 검색함수(procTestSearch())를 다른페이지에도 쓰기위해서 이렇게 controll, model로 분리해서 옮기는 일을 했습니다. (아마도 이때부터 였던거 같아요... 정신이 멍해진게.... 약 5일전 일이죠.... 식음전페중...)
이후에... 결과가 도무지 뜨지 않습니다.
현재까지 확인한 곳
1. model 파일의 검색DB접근과 controll파일의 procTestSearch 함수 접근 (아무 이상이 없는걸 확인)
2. 심지어 procTestSearch() 에서는 debugPrint() 로 결과값을 확인했을때 분명 값이 잘 출력이 되었습니다.
심지어 그자리에서 context::set('result', $result->data)을 쓰고 바로 아랫줄에 context::set(result)를 써보는 일까지 해봤어요.(context::set 과 context::get 을 의심한 너희에게 미.안.하.다.)
제가 이해하기로는 procTestSearch() 함수가 실행된 다음 context::set()으로 값을 넣어서 다음 URI 인 $returnUrl로 $result 값이 같이 가야하는게 아니었나요??
html 로 표시하기 직전까지는 값이 잘 있다가 search.html 파일에서 값을 찍어보면 여전히 NULL 이 나와서 무척 괴롭습니다(!)
아래 코드 어려운 코드 아니니... 한번 살펴봐주세요. ㅠㅠ
제가 어디가 틀렸길래 html 에서 값을 못 받는 걸까요?? 원래 context::set() 은 controll 의 'proc~~()' 이 함수에서는 사용할 수 없는것인가요??
여기에 코드를 입력해주세요 /** * @brief 검색 페이지 */ function dispTestAdminSearch(){ // 스킨 경로를 미리 template_path 라는 변수로 설정함 $template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin); if(!is_dir($template_path)||!$this->module_info->skin) { $this->module_info->skin = 'default'; $template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin); } $this->setTemplatePath($template_path); $this->setTemplateFile('search'); }
/** * @brief 검색기능 */ function procTestSearch() { $searchVar = Context::getRequestVars(); $oTestModel = &getModel('test'); $result = $oTestModel->getTestSearchResult($searchVar); if(!$result->toBool()) return $result; $result->setMessage('조건에 대한 검색결과입니다'); // 메시지 지정 및 페이지 이동 Context::set('result',$result->data); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', $mid, 'act', 'dispTestPage'); //debugPrint($result); //debugPrint(Context::get(result)); //return $this->stop('This Stop'); return $this->setRedirectUrl($returnUrl, $result);
<form action="{getUrl()}" method="post"> <input type="hidden" name="success_return_url" value="{htmlspecialchars(getRequestUriByServerEnviroment())}" /> <input type="hidden" name="module" value="test" /> <input type="hidden" name="mid" value="{$module_info->mid}" /> <input type="hidden" name="ruleset" value="" /> .. ..(각종 검색값 name 과 value 삽입) .. <button name="act" value="procTestSearch" type="submit">찾기</button> </form> . . < 결과값 출력하는 부분 > {@ debugPrint(Context::get(result))} debugPrint로 출력을 시도했으나 NULL 값만 출력됨
댓글 7
-
이즈야
2014.06.19 16:42
-
뀰귤
2014.06.19 17:00
@이즈야님 감사합니다
html의 해당부분을 말씀하신대로 바꿨는데....
바꿔도 그대로예요 ㅠㅠ
저는 디버그용으로 만들어서 파폭에서 firebug로 보면서 만들려고 저렇게했습니다
print_r 은 어느때 쓰는건지 궁금합니당 -
이즈야
2014.06.19 18:23
변수를 페이지에 뿌리는 역할을 합니다. -
뀰귤
2014.06.19 17:28
지금 다시해보고있는데요, context::set으로 데이터를 넘겨주더라도 바로아래에 redireactUrl을 설정을 해주면 최종목적지에서는 값을 잃어버리는것 같습니다
리디렉션을 해도 값을 읽어버리지 않고 가려면 어떻게 해야하는지 아시는분 계시면 힌트좀 베풀어주세용~ -
이즈야
2014.06.19 18:25
검색을 컨트롤러에서 처리하지 말고 뷰에서 처리하세요.. -
뀰귤
2014.06.19 19:35
@이즈야님 알려주셔서 감사합니다
제 실력에서는 이즈야님말씀대로 쉽게쉽게가는게 좋을것 같아요
그런데 문제가있는게 뭐냐면....
같은페이지인데 뷰에서 검색버튼을 누르면 페이지가 url을 몽땅 잃어버리고 루트만 표시되네요. 페이지는 같은 search.html 인데말이죠....
.
아...조금만 더하면 완성이라그런지 조바심이 생기는군요 ㅠㅠ -
이즈야
2014.06.19 22:49
오류가 나면 그렇게 되는 걸로 알고 있습니다.
라고 되어 있는데,
print_r(Context::get($result))
로 바꿔보실래요?