5

残念ながら一貫性のない現在のライブ サイトの URL 構造を単純にコピーするために、Zend でルーティングを作成する必要があります。

私がやりたいことは、次のようにサブドメインをルーティングすることです:

www.site.com -> 静的ルーター

a.site.com & b.site.com -> カテゴリ コントローラ

c.site.com & d.site.com -> ロケーションコントローラー

残りのサブドメイン -> ユーザーコントローラー

誰かがこれを解決する方法を教えてくれますか、ありがとう。

アップデート:

最初にFgeに感謝します。あなたの答えに投票してください。うまくいきますが、さらにアドバイスが必要です:

  1. 各ルールに多くのサブドメインがあるため、ループでルールを追加するよりも良い方法があります

    foreach($subdomains as $a){ $tr = new Zend_Controller_Router_Route_Hostname( "$a.site.com", array( 'module' => 'mod', 'controller' => 'ctrl', 'param_1' => $ )); $router->addRoute($a,$tr); }

  2. http://a.site.com/:b/:cのようなパラメーターを解析するために他のルーティング タイプと組み合わせる方法 (連鎖?) 、param_1 (a)、param_2 (b) に解析したい、param_2 (c)

4

1 に答える 1

6

注: 逆マッチング
ルートは逆の順序でマッチングされるため、最も一般的なルートが最初に定義されていることを確認してください。

(Zend_Controller_Router)

したがって、最初に他のすべてのサブドメインのルートを定義し、次に特定のサブドメインを定義する必要があります。

$user = new Zend_Controller_Router_Route_Hostname(
    ':subdomain.site.com',
    array(
        'controller' => 'user'
    )
);
$location1 = new Zend_Controller_Router_Route_Hostname(
    'c.site.com',
    array(
        'controller' => 'location'
    )
);
$location1 = new Zend_Controller_Router_Route_Hostname(
    'd.site.com',
    array(
        'controller' => 'location'
    )
);
// other definitions with known subdomain
$router->addRoute($user);   // most general one added first
$router->addRoute($location1);
$router->addRoute($location2);
// add all other subdomains

更新された質問の更新:
1) これは、サブドメインをルーティングするパラメーターの違いに大きく依存します。あなたの例では、それらをすべて同じモデルとコントローラーにルーティングし、実際のサブドメインをパラメーターとして追加しました。これは、上に投稿したユーザールートで簡単に実行できます。そこで、サブドメインがパラメーター subdomain ( $request->getParam("subdomain")) として設定されます。サブドメインを既知のコントローラー/モデルのアクションにしたい場合は:subdomain:action. しかし、サブドメインごとに他のコントローラー/モデルを用意したらすぐに、それらをループする (または構成ファイルを使用する) 必要があると思います。質問で提供した例では、ルートは次のようになります。

$user = new Zend_Controller_Router_Route_Hostname(
    ':param1.site.com',
    array(
        'controller' => 'user'
    )
);
// routes "subdomain".site.com to defaultModul/userController/indexAction with additional parameter param1 => subdomain.

サブドメインにスキーマがない限り、一般的な方法でそれらをルーティングすることは非常に困難です。

2) これは、ルーター チェーンが機能する例です。外側のルートはサブドメインを処理するホスト名ルートであり、内側のルートはその:a/:b部分を処理します。これは、たとえば次のようになります。

$user->chain(new Zend_Controller_Router_Route(':a/:b'));
于 2010-11-10T08:52:06.250 に答える