0

私は、開発者がリソースの追加/挿入後にリソースの詳細ページへのリダイレクトを簡単に設定できるようにすることを目標とする小さなフレームワークを作成しています。

通常、これは PDO::lastInsertID() と同じくらい簡単ですが、リソースを識別するために ID だけでなく、リソースの名前/タイトルの書式設定されたバージョンも使用しています。

たとえば、新しいトーナメントが「テスト トーナメント」と呼ばれる場合、そのリソース URI は domain.com/tournament/328-test-tournament になります。

したがって、挿入後にリダイレクトするときは、「328」だけでなく「328-test-tournament」にリダイレクトする必要があります。これは、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 の連結をその場で処理します。

このようなものは存在しますか?または、少なくとも、テーブル名と ID を使用してクエリを作成できるように、挿入されたテーブルを返す PDO メソッドはありますか?

4

2 に答える 2

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}");

タイトルは、オブジェクトを解放するまでメモリに保持されます。保存してデータベースから取得する必要はありませんか?

于 2012-07-14T21:43:32.880 に答える
1

DoctrineまたはPropelをチェックしてください。

これらは 2 つの非常に有名なオブジェクト リレーショナル マッパーであり、ベース PDO として使用されます。 ORMはあなたが求めたことを行うことができ、他にもたくさんの楽しい機能があります。チェックしてみてください。

于 2012-07-14T21:34:43.783 に答える