2012-05-10 6 views
0

私はZend Frameworkを使用して分単位でアプリケーションを作成しており、データベース駆動型のルートを使用しています。Zend Framework:ホームページのルートを作成する

デフォルトのルーティングは無効になっていますが、これはホームページにアクセスするときにエラーが発生しているようです。

デフォルトのルートを再作成する方法を教えてもらえますか?それは、インデックスコントローラのインデックスアクションにホームページ「/」を訪れたユーザーがかかるでしょうか?

EDIT @RockyFord、あなたの答えに基づいて、私は以下のコメントを追加しました:

if($this->_frontController->getRequest()->getRequestUri() == '/') { 
    $route= new Zend_Controller_Router_Route(
     '*', 
     array('controller' => 'index', 
       'action'  => 'index') 
    ); 
    $router->addRoute('default', $route); 
) 

をしかし、あなたが見ることができるよう、私たちが使用してホームページにしているかどうかをテストしなければなりませんでしたURL。誰もこれを行うためのより良い方法を提案することはできますか?

ルート宣言のスラッシュは取り除かれますので、私は、ルールのこの種を使用することはできません

$route = new Zend_Controller_Router_Route_Static('/', array(
    'module' => 'default', 
    'controller' => 'index', 
    'action' => 'index' 
)); 
$router->addRoute('homepage', $route); 

がZend_Controller_Router_Route_Staticから撮影:マニュアルから

public function __construct($route, $defaults = array()) 
{ 
    $this->_route = trim($route, self::URI_DELIMITER); 
    $this->_defaults = (array) $defaults; 
} 
+0

デフォルトルートを無効にした場合、なぜそれを再作成したいですか?代わりにホームページにのみスタティックルートを追加することもできます。 –

+0

おかげさまでティム - しかし、私が達成しようとしているのは、ホームページへの静的ルートを追加することです。 – Sjwdavies

答えて

1

ルート定義には、もう1つの特殊文字 - ワイルドカード - represを含めることができます'*'記号が付いています。これは、同じモジュール をデフォルトのモジュールルート(URIで定義されたvar => valueのペア)に収集するために使用されます。 次のルート多かれ少なかれ模倣Moduleルートの挙動に:コード内でご興味あれば

$route = new Zend_Controller_Router_Route(
    ':module/:controller/:action/*', 
    array('module' => 'default') 
); 
$router->addRoute('default', $route); 

Zend_Controller_Router_Route_Moduleは、ルートの実際の定義を持っています。多分

[EDIT] :

//not sure if the name will work or not, might need empty string? 
$route = new Zend_Controller_Router_Route_Static(
    '/', 
    array('controller' => 'index', 'action' => 'index') 
); 
//also might need a better name like 'home' 
$router->addRoute('/', $route); 
+0

あなたの非常に迅速な返答をありがとうが、これは動作しませんでした。 Zend_Framework \ library \ Zend \ Controller \ Router \ Rewrite.php:408' – Sjwdavies

+0

残念ながら私はあなたに経路を教えてもいいですが、私はまだ例外 'Zend_Controller_Router_Exception'どのようにあなたのアプリがそれを使用するように設定されているか分かりません。ルートは逆順にマッチしますので、より一般的なルートを最初に登録する必要があります。がんばろう。 – RockyFord

+0

ありがとう - あなたのコメントに基づいて私の答えを更新しました – Sjwdavies

1

ホームページのルートだけで次のようになります。

$route = new Zend_Controller_Router_Route_Static('/', array(
    'module' => 'default', 
    'controller' => 'index', 
    'action' => 'index' 
)); 
$router->addRoute('homepage', $route); 

は、あなたがリクエストに行きたい方のコントローラとアクションをデフォルト/インデックス/インデックス値を置き換えますに。

+0

Timさん、ありがとうございます。Zend_Controller_Router_Route_Staticのコンストラクトを見てください。スラッシュが削除されていることがわかります: 'public function __construct($ route、$ defaults = array )) { $ this - > _ route = trim($ route、self :: URI_DELIMITER); $ this - > _ defaults =(配列)$ defaults; } ' – Sjwdavies

+0

私は自分の答えを更新しました – Sjwdavies

+0

スラッシュが取り除かれることは知っていますが、ルートがマッチしたときにスラッシュが機能するはずです。そのルートはまだ「経路が一致していません」というエラーを表示していますか? –

関連する問題