2014-09-02 2 views
-2

PHP를 처음 사용했습니다. 예를 들어 MVC 프로젝트를 사용하고 있는데 제출 버튼을 누를 때마다 내 컨트롤러가 호출된다는 것을 알게되었습니다. 이 문제는 버튼을 누를 때마다 새 모델을 생성한다는 점에서 문제가 있습니다.PHP MVC 컨트롤러 반복 작성

이 문제를 해결하기 위해 숨겨진 필드를 사용하여 단추가 이미 눌려져 있는지 확인했습니다. 그렇다면 새 모델을 인스턴스화하지 않습니다. 그렇지 않으면 않습니다.

//code listed below is in the controller which is called each time button 
//has been pressed... 
$myModel;//used to access model and its functions from controller 
if(isset($_POST['has_started'])) 
{ 
    //stores some logic that uses $myModel variable 
    playingGame(); 
} 
else 
{ 
    echo "just starting..."; 
    $myModel=new HangManModel(); 
    startGame($myModel); 
} 

이 작동하는 것 같다,하지만 playingGame()가 호출 될 때이 선언되지 않았기 때문에 나는 $ myModel와 그 기능을 사용할 수 없습니다 알려줍니다, 또는 비 객체입니다 컨트롤러에서 코드는 다음과 같습니다 . 이 문제를 어떻게 해결할 수 있습니까? 도와 주셔서 감사합니다!

+0

"MVC 프로젝트"란 무엇인가요? MVC 아키텍처 패턴과 관련하여 ** 아무 것도하지 않고 ** 있습니다. –

+0

여기에 잘못된 생각이 있다고 생각합니다. PHP는 HTTP를 통해 사용하기위한 것이고 HTTP는 stateless입니다. 즉, 요청할 때마다 컨트롤러를 인스턴스화해야합니다. 또한 "MVC"는 PHP에서 MVC가 아닙니다 (적어도 C와 같은 항목에서 찾을 수 있음). – Scopey

+0

MVC와는 아무런 관련이 없습니다. 위의 코드는 컨트롤러 클래스에 있습니다. '제출'을 누를 때마다 모델이 생성되는 것을 방지하는 방법을 알아 내려고 노력 중입니다. – JKoko

답변

1

처음에는 여기에서 볼 수있는 mvc 패턴이 없습니다. 둘째, PHP는 HTML과 자바 스크립트로 출력을 생성하고 브라우저로 보냅니다. 다음 포스트 백에서 php는이 상태를 저장하지 않습니다.

내 이해에 따라 상태를 저장하기 위해 다음 중 하나를 사용할 수 있습니다.

1) 옵션 1 -> 세션 사용 중.

//code listed below is in the controller which is called each time button 
//has been pressed... 
$myModel;//used to access model and its functions from controller 

    if(!isset($_SESSION)){session_start();} 
if(isset($_POST['someuniqueID'])) 
{ 
    //stores some logic that uses $myModel variable 
    $someuniqueID = $_POST['someuniqueID']; 
    $myModel = $_SESSION[$someuniqueID]; //retrieving the session object. 
    playingGame($myModel); //passing your model to the main function. 
} 
else 
{ 


    echo "just starting..."; 
    $myModel=new HangManModel(); 
//start session 

    $_SESSION['someuniqueID'] = $myModel; // do not store very complex model object to avoid server memory problem. 
    startGame($myModel); 
} 

2) 옵션 2는 -> 해당 객체에는 직렬화 및 숨겨진 필드에 다음 다시 게시됩니다 보내 그러나 이것은 대역폭 소비 문제가있을 것입니다 수 있습니다. 페이지가 게시 될 때마다 모델이 앞뒤로 보내집니다.

3) 옵션 3 -> 모델이 큰 경우 데이터베이스를 사용하고 고유 ID와 일련 화 된 $ myModel 개체를 저장할 수있는 임시 테이블을 만듭니다. 데이터베이스에서 원하지 않는 상태를 정리해야합니다. 세션 및 숨겨진 필드와 달리 영구 저장 장치이기 때문입니다.

+0

대단히 감사합니다! MVC 디자인 패턴을 여러 번 사용했지만 PHP에서는 사용하지 않았습니다. 나는 이것을 시도 할 것이고, 나는 그 의견에 감사한다. – JKoko

+0

당신은 환영합니다. 해결책으로 도움이되기를 바랍니다. – Ganesh