5

symfonyは初めてで、簡単な質問があります。モジュールシステムを理解しようとしていますが、データベースのモデルに基づいていない実際のホームページやその他のページを作成する方法がわかりません。たとえば、静的な情報を含む単純なaboutページや、さまざまなモデルの一連の情報を組み合わせたホームページなどです。

誰か助けてもらえますか?

4

6 に答える 6

4

まず第一に、モジュールはデータベースのモデルに限定する必要はありません。データベース コンテンツに依存しない Foo モジュールと、主に 3 つの異なるモデルに基づく Bar モジュールを使用できます。モジュールの分離は、サイトを管理しやすいセクションに論理的に分割する方法です。たとえば、e コマース サイトには、Products モジュール、Categories モジュール、Cart モジュールなどがあります。

最後の文は 2 つの部分に分けることができます。

1) 静的情報はどのページにも置くことができます - 「私たちについて」や「よくある質問」などの場合、私は個人的に「デフォルト」または「ホーム」モジュールを使用する傾向があり、そこにさまざまなアクションを作成します。

./symfony generate:module appname home

class homeActions extends sfActions
{
  public function executeAbout(sfWebRequest $request)
  {
    // ...
  }

  public function executeFaq(sfWebRequest $request)
  {
    // ...
  }
}

対応するテンプレート ファイル (aboutSuccess.php、faqSuccess.php) を使用します。

2) ページは、さまざまなモデルのデータで構成できます。お好みの ORM のデータ取得方法を使用して、それをビュー (な$this->data = MyModel->findByColumn(...)​​ど) に設定するだけです。異なるモジュールからのデータを意味する場合は、異なるモジュール (ナビゲーションなど) で使用できるページの要素のパーシャルまたはコンポーネントを調べたほうがよいでしょう。これらの詳細については、Symfony のドキュメントを参照してください。

于 2010-01-06T17:17:17.693 に答える
4

私はこの方法で静的ページを処理することに慣れています。

まず、apps/frontend/config/routing.yml に新しいエントリを作成します。

page:
  url:   pages/:page
  param: { module: page, action: index }

次に、「ページ」モジュール (apps/frontend/modules/page/actions/actions.class.php) を作成します。

<?php
class pageActions extends sfActions
{
  public function executeIndex()
  {
    $this->page = $this->getRequestParameter("page");
    $this->forward404Unless($this->_partialExists($this->page));
  }

  protected function _partialExists($name)
  {
    $directory = $this->getContext()->getModuleDirectory();
    return (is_readable($directory.DIRECTORY_SEPARATOR."templates".
            DIRECTORY_SEPARATOR."_".$name.".php"));
  }
}

最後のステップとして、modules/page/templates/indexSuccess.php に次のコードを挿入します。

<?php include_partial($page); ?>

したがって、これから行う必要があるのは、静的ページごとにパーシャルを作成することだけです。apps/frontend/modules/page/templates/_home.php http://yousite/pages/homeでアクセスできます(すべてのページに新しいルーティング エントリを追加する必要はありません)。

于 2010-01-07T13:43:28.620 に答える
3

モジュールを作成できます。たとえばstatic、すべての静的ページに対してアクションを呼び出して作成するか、リクエスト変数に応じてページを配信する 1 つのアクションのみを作成できます。このアクションが行う唯一のことは、テンプレートをロードすることです。

私見ですが、symfony にこのためのデフォルト モジュールが付属していれば良いと思います。

(私のカスタム)モジュールのアクションの例static

class staticActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    if(!$request->hasParameter('site')) {
        return sfView::ERROR;    
    }
    $this->site = $request->getParameter('site');
  }
}

このテンプレートでは:

//indexSuccess.php
<?php include_partial($site) ?>

実際の静的サイトはすべてパーシャルです。

私のrouting.yml見た目では次のようになります。

# static stuff
about:
  url: /about
  param: {module: static, action: index, site: about}

この方法では、静的サイトを追加するときに新しい部分エントリと新しいルーティング エントリを作成するだけでよく、PHP コードに触れる必要はありません。

于 2010-01-06T17:17:10.267 に答える
0

本当に静的で独立したページの場合、ディレクトリ内に任意のファイルを作成するだけです[pathToYourProjectRoot]/web

それはすなわちによってかもしれません[pathToYourProjectRoot]/web/assets/static_html/about.html。次に、 で直接ページにリンクしますhttp://your.site.com/assets/static_html/about.html

于 2016-03-17T08:53:34.693 に答える