我正在编写一个小框架,我的目标是让我的开发人员在添加/插入资源后,可以轻松地将资源重定向到资源的详细信息页面。
通常这会像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构造一个查询?
答案 0 :(得分:1)
答案 1 :(得分:1)
“标题”不属于Tournament
个对象吗?即。
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}");
标题会一直存在内存中,直到您释放对象,无需保存并然后从数据库中检索它?