0

パーマリンク(主キーを非表示にして重要な文字列に置き換える)に関する段落を読みましたが、このコードがどのように機能するか理解できません。

public function executePermalink($request)
  {
    $article = ArticlePeer::retrieveBySlug($request->getParameter('slug');
    $this->forward404Unless($article);  // Display 404 if no article matches slug
    $this->article = $article;          // Pass the object to the template
  }

このコードは典型的な推進力ですよね?教義のためにそれのようなものがありますか?私はretrieveBySlug()関数を書く必要がありますか?書き方がわかる例はありますか?

どうもありがとう

4

2 に答える 2

1

Doctrineには、使用できる「Sluggable」と呼ばれる拡張機能があります。

それを機能させるには、schema.ymlを変更し、「Sluggable」拡張子を追加する必要があります。

# config/doctrine/schema.yml
Article:
  actAs:
    Timestampable: ~
    Sluggable:
      fields: [name]
  columns:
    name:
      type: string(255)
      notnull:  true

routing.ymlでDoctrineRouteを設定します

# apps/frontend/config/routing.yml
category:
  url:      /article/:slug
  class:    sfDoctrineRoute
  param:    { module: article, action: show }
  options:  { model: Article, type: object }

次に、アクションのコードで次のようなことを行うことができます。

public function executeShow(sfWebRequest $request)
{
    $this->article = $this->getRoute()->getObject();
    $this->forward404Unless($article);  // Display 404 if no article matches slug
    $this->article = $article;          // Pass the object to the template
}

スキーマを変更した後、doctrine:buildを実行してデータベースを再作成することを忘れないでください。

于 2012-04-26T19:51:22.090 に答える
0

今は正常に動作しています!

# apps/frontend/config/routing.yml
opera_slug:
  url:   /:sf_culture/opere/:operaslug.html
  class:    sfDoctrineRoute
  param: { module: opera, action: permalink }
  options:  { model: Opera, type: object }
  requirements:
    sf_culture: (?:it|en|es|fr)



  public function executePermalink(sfWebRequest $request)
  {  
    $this->opera = $this->getRoute()->getObject();
    $this->forward404Unless($this->opera);  // Display 404 if no article matches slug
    //$this->opera = $opera;          // Pass the object to the template  
  }  

ご覧のとおり、関数の使用中にエラーが発生したため、executePermalink()の最後の2行を変更しました

于 2012-05-03T08:31:43.517 に答える