2012-03-06 7 views
1

私の状況は次のとおりです。 私が取り組んでいるアプリケーションは、サブドメインを使ってクライアントが誰であるかを検出します。 ie:client1.site.com、client2.site.com これは問題なく動作しています(特別なルートは使用していません)。Zend Routeをセットアップして、MVCパラメータの前に追加の 'パラメータ'を使用する方法は?

しかし、私はコードを「テスト」環境に置く必要があります。しかしこの場合、私は単一のサブドメインに制限されます。 すなわち:static.testsite.com

私の考えは次のように私は要求を変換することができるように程度にZendのルーティングを使用していた: static.testsite.com/client1/... または static.testsite.com/client2/...

だから、最初の「パラメータには、」標準MVCパラメータ(モジュール/コントローラ/アクション)に続いてクライアント名である必要があります。

私は、このルーティングロジックを、テスト環境でのみ利用可能なコントローラプラグインのrouteStartupフックに追加する予定です。

まず、私が考えていないこの仕事を達成するための簡単な方法はありますか? 第2に、もしそうでなければ、誰もこのような要求を経験したことはありますか?

私は現時点で、Zendが提供するさまざまなルートを試していますが、これまでのところ、私は失敗しました(クライアント名はコントローラになるなど)。

ご迷惑をおかけして申し訳ありません。 ありがとうございます。

編集:リクエストオブジェクトのリクエストURIを操作することで、これを醜い方法で実行しようとしました。ただし、これにより、/ clientX /部分がURLにないまま残りの部分が残され、問題がさらに発生します。/clientX /部分ですべての場所を更新することは、実際には実現可能ではありません。だから私はクライアントを取得することができますが、サイトの残りの部分は機能していないので、ルートが唯一の方法だと思うようになります。

編集#2:次のコードで作業しています。

// within a Controller Plugin at routeStartup 

    $oFrontController = Zend_Controller_Front::getInstance(); 
    $oRouter = $oFrontController->getRouter(); 

    $oNewDefaultRoute = new Zend_Controller_Router_Route(
      ':testClient/:controller/:action/*', 
      array(
       'module' => 'default', 
       'controller' => 'index', 
       'action' => 'index', 
       'testClient' => null, 
      ) 
     ); 

    $oRouter->addRoute('default', $oNewDefaultRoute); 

ただし、既存のURLには影響しないため、問題は残りました。したがって、それらのいずれかにアクセスしようとすると、testClientがなくてエラーが発生します。私は、初期の「クライアント」割り当てに続くいくつかのセッションベースのソリューションが採用される必要があると考えています。

しかし、誰かがそれを行うよりエレガントな方法を知っている場合は、私に知らせてください。ありがとうございました。

+0

なぜ、client1test.testsite.comを使用しないのですか?実際には別個のクライアントだが、完全に別個のテスト対実稼働環境を持つことができる – Ashley

+0

これは実際にはこれらの変更を必要としないので理想的だろう。残念ながら、問題はこれらが実際のドメイン/サブドメインであり、そのためにテスト環境でこれらのクライアントのそれぞれにサブドメインを作成できないことです。上記のように「私は単一のサブドメインに制限されています」 –

+0

URLの '/ clientX'部分はいつも_ですか?この部分が省略され、最初のパラメータがモジュールまたはコントローラの場合がありますか? – bububaba

答えて

1

iniファイルベースのソリューションの提案、テストされていない - ちょうど一般的な考え方について:$request->getParam('client')を通じてアクセス可能client

routes.withClient.route = ":client/:module/:controller/:action/*" 
routes.withClient.defaults.module = "default" 
routes.withClient.defaults.controller = "index" 
routes.withClient.defaults.action = "index" 

値。

+0

ありがとうございました。私はController Plugin内で動作しているので、これをテストしませんでした。しかし、新しいルートの代わりに、私は既存のデフォルトルートを上書きしました。私はルートとして、私が欲しいものを正確に行うための他の方法はないと思われるので、答えとしてマークしました。いずれにしても助けてくれてありがとう。 –

関連する問題