0

カテゴリとページの2つの異なるモデルがあります。私のschema.yml:

propel:
  wiki_category:
    id:           ~
    address:      { type: varchar(255) }
    name:         { type: varchar(255), required: true }
    text:         { type: longvarchar }

  wiki_page:
    id:           ~
    category_id:  { type: integer, foreignTable: wiki_category, foreignReference: id, required: true}
    address:      { type: varchar(255) }
    name:         { type: varchar(255), required: true }
    text:         { type: longvarchar, required: true }

私のrouting.yml:

category_show:
  url:     /:address.:sf_format
  class:   sfPropelRoute
  options: { model: WikiCategory, type: object }
  param:   { module: category, action: show, sf_format: html }
  requirements: { sf_method: get }
homepage:
  url:   /
  param: { module: category, action: index }
page_show:
  url:     /:address/:address
  class:   sfPropelRoute
  options: { model: WikiPage, type: object }
  param:   { module: page, action: show, sf_format: html }
  requirements: { sf_method: get }

/:address(カテゴリから)/:address(ページから)のようなルートを作りたい

これを行う方法はありますか?

アイデアは、このカテゴリのページへのリンクを含むカテゴリのページを作成することです。リンクを押すと、ページのアクション表示が実行されます。

4

1 に答える 1

0

同じ名前のフィールドが 2 つあるため、Propel は (から/:address/:addressの) どちらがオブジェクトを取得するために使用するものであるかを理解できませんWikiPage

最初の最も簡単なオプションはaddress、スキーマ内の名前を変更することです。のようaddress_pagewiki_page、このようなルートを持つことができ、Propel はオブジェクト/:address/:address_pageを取得する方法を知っています。WikiPage

しかし、この 2 番目のオプションをお勧めします。

クラスsfPropelRouteを使用してオブジェクトを取得しないでください。sfRequestRoute代わりに使用してください。そして、パラメーターに任意の名前を付けることができます。次のようなより明示的なもの: /:address_category/:address_page:

page_show:
  url:     /:address_category/:address_page
  class:   sfRequestRoute
  param:   { module: page, action: show, sf_format: html }
  requirements: { sf_method: get }

次に、アクション内でオブジェクトを手動で取得する必要があります。

$wikiPage = WikiPageQuery::create()
  ->filterByAddress($request->getParameter('address_page'))
  ->leftJoin('WikiPage.WikiCategory')
  ->where('WikiCategory.address = ?', $request->getParameter('address_category'))
  ->findOne();

sfPropelRoute が (基本的に) 何をするかを知らせるために:

  • リクエストパラメータとルーティング構成を使用してオブジェクトを取得してみてください
  • オブジェクトが見つからない場合は 404 にリダイレクトします

あなたの場合、既にオブジェクトを取得しています。存在しない場合は、404 に転送する必要があります。

$this->forward404Unless($wikiPage);
于 2013-02-22T08:37:57.710 に答える