묻고답하기
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~~()' 이 함수에서는 사용할 수 없는것인가요??
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 여기에 코드를 입력해주세요 /** * @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' ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /** * @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 ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < 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 17:00
@이즈야님 감사합니다
html의 해당부분을 말씀하신대로 바꿨는데....
바꿔도 그대로예요 ㅠㅠ
저는 디버그용으로 만들어서 파폭에서 firebug로 보면서 만들려고 저렇게했습니다
print_r 은 어느때 쓰는건지 궁금합니당 -
변수를 페이지에 뿌리는 역할을 합니다.
-
뀰귤
2014.06.19 17:28
지금 다시해보고있는데요, context::set으로 데이터를 넘겨주더라도 바로아래에 redireactUrl을 설정을 해주면 최종목적지에서는 값을 잃어버리는것 같습니다
리디렉션을 해도 값을 읽어버리지 않고 가려면 어떻게 해야하는지 아시는분 계시면 힌트좀 베풀어주세용~ -
검색을 컨트롤러에서 처리하지 말고 뷰에서 처리하세요..
-
뀰귤
2014.06.19 19:35
@이즈야님 알려주셔서 감사합니다
제 실력에서는 이즈야님말씀대로 쉽게쉽게가는게 좋을것 같아요
그런데 문제가있는게 뭐냐면....
같은페이지인데 뷰에서 검색버튼을 누르면 페이지가 url을 몽땅 잃어버리고 루트만 표시되네요. 페이지는 같은 search.html 인데말이죠....
.
아...조금만 더하면 완성이라그런지 조바심이 생기는군요 ㅠㅠ -
오류가 나면 그렇게 되는 걸로 알고 있습니다.
라고 되어 있는데,
print_r(Context::get($result))
로 바꿔보실래요?