0

このコードで:

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin'
        )
    )
);

http:// app / test / param1 / param2 / param3- > OK

http:// app / test / param1 /param2/ ->失敗

2番目のケースでは、アプリケーションはparam2を認識しません。

アプリケーションがparam2を読み取るためにparam3が必要なようです...

どうすればいいですか?

ありがとう!


@RageZのコードでテストする

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);

http:// app / test / -> OK

http:// app / test / some- > OK

http:// app / test / some / more-> FAIL

http:// app / test / some / more / andmore- > OK

アイデア?

4

2 に答える 2

1

パラメータがオプションの場合は、デフォルト値を指定する必要があります。

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);

質問とは何の関係もありませんが、addRouteの3番目のパラメーターを使用することをお勧めします。Zend Frameworkは、パラメーター値が指定した形式と一致することを確認します。その場合、idは整数であると思います。

于 2010-12-16T02:46:57.317 に答える
1

すべてにデフォルト値を与えてみてください

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'action' => 'index',
            'type' => 'sometype',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);

いくつかのテストプロジェクトでコードを試してみましたが、これで修正され、うまくいくことを願っています。

于 2010-12-16T04:03:15.803 に答える