0

我正在编写一个小框架,我的目标是让我的开发人员在添加/插入资源后,可以轻松地设置重定向到资源的详细信息页面。

通常这就像 PDO::lastInsertID() 一样简单,但我不仅仅使用 ID 来识别资源,我还使用资源名称/标题的格式化版本。

例如,一个新的锦标赛可能被称为“测试锦标赛”,因此它的资源 URI 将是 domain.com/tournament/328-test-tournament。

因此,当我在插入后重定向时,我需要重定向到“328-test-tournament”而不仅仅是“328”。这是出于 URL 完整性目的而设计的。我不希望人们使用不匹配的 ID 和标题访问单个资源。

也就是说,在我插入之后,我希望能够自动返回的不仅仅是 ID,而是我输入的整个数据集,这样我就可以格式化标题并重定向。

我可以在控制器中执行此操作:

$this->TournamentModel->insert();

$id = PDO::lastInsertID();
$title = my_title_formatting_function($_POST['title']);
@header("Location: domain.com/tournament/{$id}-{$title}");

但我想要一个稍微优雅一点的解决方案,如下所示:

$id = $this->TournamentModel->lastInsert();

lastInsert 实际上是核心模型中的一个公共方法,它不仅检索最后一个插入的 id,还检索整个行。然后我会在那里处理标题格式和 id 连接。

这样的事情存在吗?或者至少有一个 PDO 方法可以返回插入的表,以便我可以使用表名和 id 构造查询?

4

2 回答 2

1

检查DoctrinePropel

它们是两个非常著名的对象关系映射器,具有作为基础 PDO。 ORM 可以满足您的要求,并且还有许多其他您会喜欢的功能,请检查一下。

于 2012-07-14T21:34:43.783 回答
1

“标题”不属于Tournament对象吗?IE

class TournamenentModel {
  private $id;
  private $title;

  public function setTitle($title) {
    $this->title = $title;
  }

  public function getTitleFormatted() {
    return my_title_formatting_function($this->title);
  }
}

在这种情况下,您的插入方法可能看起来像

PDO::save(array('title' => $this->title));

您的工作流程将遵循以下原则:

$tournament = new TournamentModel();
$tournament->setTitle($_POST['title']);
$tournament->insert();

$title = $tournament->getTitleFormatted();
@header("Location: domain.com/tournament/{$id}-{$title}");

标题会一直保存在内存中,直到您释放对象,不需要保存然后从数据库中检索它吗?

于 2012-07-14T21:43:32.880 回答