Model:
class News
{
public $title;
public $article;
public $date;
public $published;
public $publisher;
public $image;
public static function getSingleArticle($id)
{
$query="SELECT *, date_format(date, '%D %M %Y') AS uk_date FROM news WHERE id=$id";
return mysql_query($query);
}
}
控制器:
public function editAction()
{
$row=News::getSingleArticle($_GET['id']);
$model=mysql_fetch_object($row);
include('application/view/admin/includes/header.php');
include('application/view/admin/news/update.php');
include('application/view/admin/includes/footer.php');
}
在我看来,有一个显示属性的表单,例如<?php echo $model->title; ?>
在我的数据库表中,字段发布者和图像不存在,因此我收到"未定义的属性:stdClass"错误。但是,我需要将这些字段保留在视图中以备将来使用。每当我调用模型时,如何引入公共模型变量作为模型对象的一部分?(在这种情况下,我希望它们只返回一个空值(
它不是完美的模型类,但我认为它接近你的,同时提供了一个更直接的接口来了解它的价值:
class News
{
public $title;
public $article;
public $date;
public $published;
public $publisher;
public $image;
public function getSingleArticleRow($id)
{
$query = "SELECT *, date_format(date, '%D %M %Y') AS uk_date FROM news WHERE id=$id";
return mysql_query($query);
}
public function loadSingleArticle($id)
{
$obj = mysql_fetch_object($this->getSingleArticleRow($id));
foreach($obj as $key => $value)
$this->{$key} = $value;
}
}
控制器:
public function editAction()
{
$model = new News();
$model->loadSingleArticle($_GET['id']);
include('application/view/admin/includes/header.php');
include('application/view/admin/news/update.php');
include('application/view/admin/includes/footer.php');
}
但是,您应该真正研究PDO,因为它允许更具体,更简化地从数据库中获取对象。
还可以使用参数化查询,因为 SQL 注入作为内置功能提供,可通过 $id
参数动态扩展 SQL。我假设你不希望这样。
mysql_fetch_object返回 stdClass 的实例;您期待的是 News 的实例。字段"title"是在新闻中定义的,而不是在stdClass中定义的。
@hakre给出的代码应该对您有所帮助。