2014-09-02 80 views
-2

我是PHP新手。我以一個MVC項目爲例,我注意到每次按下提交按鈕時,我的控制器都會被調用。問題在於,每次按下按鈕時都會創建一個新模型。PHP MVC Controller重複創建

爲了解決這個問題,我使用了隱藏字段來檢查按鈕是否已經被按下。如果有,那麼我不會實例化一個新的模型,否則我會。從控制器代碼如下:

//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架構模式有**沒有關係? – 2014-09-02 05:15:38

+0

我認爲你在這裏有錯誤的想法。 PHP旨在通過HTTP使用,並且HTTP是無狀態的。這意味着您必須在每個請求中實例化您的控制器。還應該注意的是,在PHP中的「MVC」根本不是真正的MVC(至少你會發現像C這樣的東西) – Scopey 2014-09-02 05:16:40

+0

它與MVC無關嗎?上面的代碼在我的控制器類中。我試圖找出如何防止每次按下「提交」時創建模型。 – JKoko 2014-09-02 05:17:11

回答

1

首先,我沒有看到mvc模式。 其次,PHP執行並生成html和javascript輸出併發送到瀏覽器。 在下一個回傳中,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)1選項 - >您可以連載該對象和隱藏字段發送那麼它將被調回,但這將有帶寬消耗問題。每次頁面發佈時,它都會來回發送模型。 3)Option3 - >如果您的模型很大,請使用數據庫並創建一個臨時表,您可以在其中存儲唯一標識和序列化的$ myModel對象。您將需要清理數據庫中不需要的狀態。因爲與會話和隱藏字段不同,它是永久存儲。

+0

非常感謝!我曾多次使用過MVC設計模式,但從未使用過PHP。我會試試這個,我很欣賞這個反饋。 – JKoko 2014-09-02 05:35:12

+0

不客氣。希望它有助於解決方案。 – Ganesh 2014-09-02 06:39:58