0

Zend フレームワークを使用しているサイトで、すべてのユーザーが foo.com/username を持つことができるようにする必要があります。

問題は、foo.com/login およびその他のコントローラーをそのまま動作させたいということです。そのため、使用するコントローラーの 1 つとしてユーザーを指定できないことを既に検証しています。htaccess を変更できないか、mvc 構成が機能しません。だから私はルーターを使用しています。

次のようなものを使用する場合、私はそれを知っています:

$routes = array();  
        $routes['entry']  = new Zend_Controller_Router_Route_Regex('SOME REGEX HERE', 
            array(  
                'controller' => 'profile',  
                'action'     => 'show'  
            ),  
            array(  
                'id' => "dsadsa", // maps first subpattern "(\d+)" to "id" parameter  
                1 => 'id' // maps first subpattern "(\d+)" to "id" parameter  
            )  
        );  

$router->addRoutes($routes); 

正規表現に一致するものすべてがリダイレクトされるようにすることはできますが、非常に大きな OR でコントローラーを実際にリストする必要がないより良い方法 (どういうわけか 2 つのルーターをチェーンする) があるかどうかはわかりません。

何か案が?

4

2 に答える 2

0

このようなものが機能するはずです:

$routes = array();  

$routes['entry'] = new Zend_Controller_Router_Route(
    ':userName', 
    array(  
        'controller' => 'profile',  
        'action'     => 'show'  
    )
);

次に、/ login、/ logoutなど、他のすべてのルートを追加します。Timが言ったように、Zendはルートを逆の順序で照合するため、最終的に「ユーザー名」に送信する前に、ルートの「ホワイトリスト」と照合しようとします。 「ルート。

これにより、Zendがコントローラー/アクションが存在することを確認するために行うあらゆるタイプのエラーチェックが中断されます。これは、ルートの一致がない場合、すべてが/ profile/showにルーティングされるためです。

ただし、foo.com / user / <username>を処理できれば、これらすべてを簡単に回避できます。

于 2008-12-21T07:05:55.420 に答える
0

ユーザー名ルート(上記の正規表現ルート)を定義し、最初にルーターに追加してから、コントローラールートを追加するだけです。次に例を示します。

$router->addRoute('user', new Zend_Controller_Router_Route('controller/:var'));

Zend は、逆の順序でリクエストを定義済みのルートに一致させようとします。I request がコントローラー ルートのいずれとも一致しない場合、それを正規表現ルートと照合しようとします。

于 2008-12-19T18:27:40.523 に答える