0

私にはかなりシンプルに聞こえるが、そうではないように見えるものが欲しい.

私の問題は、アプリケーションに 2 つのルートが必要なことです。

モジュールが管理者の場合は常に、次のルートを適用します。

$router->addRoute(
            'backend',
            new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
        );

これはうまくいきます。URL の例: http://localhost/server/domains/demo/admin/images/album/3admin はモジュール、images はコントローラーなどです。

私が望むのは、ユーザーがに行くと、にhttp://localhost/server/domains/demoリダイレクトされることだけです。以降はすべて単一のパラメーターと見なす必要があります (unknown の可能性あり)。default moduleindex controllerindex actiondemo//

オンラインで見つけたものを使用したりRoute_Regex、試し(.*)たり、試したりして、いくつかのことを試しました。(\d+)値を切り替えたり、静的にしたり、 on/off を切り替えたりしましremoveDefaultRouterたが、何も機能しませんでした。以下に、現在のブートストラップを示します。何か案は?

$router = $this->frontController->getRouter();
    $router->removeDefaultRoutes();
    $router->addRoute(
        'backend',
        new Zend_Controller_Router_Route('/admin/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
    );

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

バックエンドは正常に動作しhttp://localhost/server/domains/demo/ますが、次のエラーが発生します。No route matched the request

Zend_Route は私にとって常に少し漠然としたものだったので、答えが与えられたらその理由を説明してください。前もって感謝します!

一時修正

私が使用する一時的な修正の下。それはまさに私が望むように機能しますが、モジュールが管理者であるかどうかを確認しなくても Zend_Route で同じことが達成できると信じています。

$router = $this->frontController->getRouter();
    $uri = explode('demo/', $_SERVER['REQUEST_URI']);
    $uri = (isset($uri[1])) ? explode('/', $uri[1]) : $uri[0];
    if($uri[0] == 'admin')
    {
        $route = new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => null, 'value' => null));
        $router->addRoute('router', $route);
    }
    else
    {
        $route = new Zend_Controller_Router_Route('/*', array('module' => 'default', 'controller' => 'index', 'action' => 'index'));
        $router->addRoute('router', $route);
    }
4

1 に答える 1

0

本当にこのルートを使用する必要がある場合は、実行する価値があります。通常の使用では、リンクを生成するだけです

Zend_Layout::getMvcInstance()->getView()->Url(array('module' => 'admin'));
Zend_Layout::getMvcInstance()->getView()->Url(array('module' => 'default'));

等々。


これがうまくいかない場合は、ルートチェーンを試してください:

    $router = Zend_Controller_Front::getInstance()->getRouter();

    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    $request = Zend_Controller_Front::getInstance()->getRequest();
    $frontRoute = new Zend_Controller_Router_Route_Module(array(), $dispatcher, $request);
    $backRoute = new Zend_Controller_Router_Route_Module(array('module' => 'admin'), $dispatcher, $request);

    $route = new Zend_Controller_Router_Route('admin');
    $router->addRoute('backend', $route->chain($backRoute));

    $route = new Zend_Controller_Router_Route('default');
    $router->addRoute('frontend', $route->chain($frontRoute));


説明:
Zend_Controller_Router_Route_Moduleアプリケーションのモジュール ルートを定義するためのものです。new Zend_Controller_Router_Route('admin')/admin/[your_module_route] のようなリンクを作成したように、通常のルートにチェーンすることにより、[your_module_route] はデフォルトarray('module' => 'admin')を定義し、他のパラメーターも取ることができます。

new Zend_Controller_Router_Route_Module(array(), $dispatcher, $request);は、標準ルーターのデフォルト ルートとして定義されています。

于 2012-08-21T15:21:36.263 に答える