一遍又一遍地创建 PHP MVC 控制器
Posted
技术标签:
【中文标题】一遍又一遍地创建 PHP MVC 控制器【英文标题】:PHP MVC Controller Created Over and Over Again 【发布时间】:2014-09-02 05:12:47 【问题描述】:我是 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);
这似乎有效,但是当调用playGame() 时,它告诉我我不能使用$myModel 及其函数,因为它没有被声明,或者它是一个非对象。我怎样才能解决这个问题?感谢您的帮助!
【问题讨论】:
什么是“MVC 项目”,因为您的代码 NOTHING 与 MVC 架构模式有关?! 我认为你在这里有错误的想法。 PHP 旨在通过 HTTP 使用,而 HTTP 是无状态的。这意味着您必须在每个请求上实例化您的控制器。还应该注意的是,php中的“MVC”根本不是真正的MVC(至少你会在C之类的东西中找到) 怎么和MVC无关?上面的代码在我的控制器类中。我试图弄清楚如何防止每次按下“提交”时创建模型。 @Scopey 谢谢,这对我来说更清楚了。但是,不能每次都重新创建模型。如何解决? @JacobKoko 仅仅因为你在代码中调用了“控制器”或“模型”并不会在 MVC 架构中神奇地把它变成。 【参考方案1】:首先,我在这里没有看到 mvc 模式。 其次,php 执行并生成 html 和 javascript 的输出并发送到浏览器。 在下一次回发时,php 不会为此存储任何状态。
据我了解,对于存储状态,您可以使用以下方法之一。
1) Option1-->使用会话。
//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) Option2--> 您可以序列化该对象并将其发送到隐藏字段,然后它将被回发,但这会产生带宽消耗问题。每次发布页面时,它都会来回发送您的模型。
3) Option3--> 如果您的模型很大,请使用数据库并创建一个临时表,您可以在其中存储唯一 id 和序列化的 $myModel 对象。您将需要从数据库中清除不需要的状态。因为与会话和隐藏字段不同,它是永久存储。
【讨论】:
非常感谢!我曾多次使用 MVC 设计模式,但从未在 PHP 中使用过。我会试试这个,感谢您的反馈。以上是关于一遍又一遍地创建 PHP MVC 控制器的主要内容,如果未能解决你的问题,请参考以下文章