2

純粋にデータベース駆動型の Web サイトを持っています。Zend Framwork とルーティングの概念は初めてですが、多くの本を読んでいます。脳はスポンジのようなもので、まだ理解されていないものもあります。私は主にルーティングに ZF を使用していますが、可能であれば他の側面も実装する予定です。ほとんどの場合、それは学習プロセスなので、フレームワークなしで自分で書きたいことがいくつかあります。

サイトの仕組みは次のとおりです。URL は、「/」(ルート インデックス)から「/contact/」(ルート ファイル)、「/deposits/」(サブディレクトリから「/deposits/ira/」まで)のいずれかになります。サブディレクトリ内のファイル。

ユーザーがリンクをクリックすると、データベースの「ページ」テーブルを調べるために、REQUEST_URI を解析する必要があります。これの唯一の目的は、REQUEST_URI に一致するレコードの ID を取得することです。その ID はページのすべてのキーであり、取得する必要があるページの他の側面のデータがあるかどうかを確認するために、他のテーブルがチェックされます。すぐに必要なのは、テンプレート名です。サイトには、それがホームページ、セクションのランディング ページ、またはセクションのコンテンツであるかどうかに応じて、使用されるいくつかの異なるページがあります。この情報は、ページが DB に保存されるときに決定されます。

このデータを取得して、適切なテンプレートを使用し、その時点から残りのデータを収集してページを完成できるようにルーティングする方法を決定できるようにしたいと考えています。

セクションとページはいつでも作成できるため、返されたテンプレート データに基づいて何をすべきかを処理できるコントローラーが必要です。これは、ほとんどの場合、REQUEST_URI で渡される値に固有ではない、いくつかの標準化された名前がコントローラーなどに必要になることを意味します。

コントローラーが選択される前にこれがすべて発生し、正しいコントローラーを選択するためにテンプレート名のみが使用されるように、Zendでこれをどのように達成しますか?

ありがとう、サイ

4

1 に答える 1

0

本当にすべてのルート (少なくともフロントエンドの場合) が動的である場合は、次のようにできます。

  1. ブートストラップで、すべてのデフォルト ルートを削除します。

  2. のプラグインで、データベースをrouteStartup取得してクエリを実行します。REQUEST_URIおそらく、そのレコードには、必要なコントローラー、アクション、レイアウトなどを把握するのに十分な情報が含まれています。

    2.1 単一のルート (REQUEST_URI に一致する) マッピングをコントローラーとアクションに追加します。

    2.2 レイアウトを必要なレイアウトに設定します。

次に、通常のディスパッチ中にルートが一致し、コントローラー/アクションが呼び出され、レイアウトが正しく設定されます。

リクエストがデータベースに保存されているどのページとも一致しない場合は、エラー コントローラー/アクションを自分で呼び出して 404 レスポンスを返す必要があります。

ただし、最終的にアプリに静的な(つまり、データベースに保存されていない)ルートがある場合(これはそうであるに違いないと思います)、データベースにアクセスして検索する前にそれらと照合する必要があります1 つを要求しました。そのマッチングは面倒に思えます (ただし、標準のディスパッチャーと同じように、要求されたルートが一致するかどうかをルーター自体に問い合わせる方法があるかもしれません)。

その場合、おそらく代替のアプローチは、ブートストラップ時に標準的な方法でこれらすべての (データベースに保存されていない) ルートをルーターに追加し、このすべてのREQUEST_URI検査、データベース検索、およびコントローラー/アクション/レイアウト処理を404 ハンドラー。要求された URL がデータベース内の何かと一致する場合は、_forward()(リダイレクトではなく) そのコントローラー/アクションに移動し、上記のようにレイアウトを設定します。

ディスパッチループで別の反復をトリガーするため、おそらく最もパフォーマンスの高いソリューションではありませんが、機能_forward()するようです。

于 2012-12-20T09:14:49.233 に答える