1

現在直面しているルーティングの問題を解決しようとしていますが、運が悪いです(何時間もグーグルで検索し、数十の例を見て、質問を解決しましたが、どれもうまくいきませんでした-最も近いのは、このRouting Zend Framework 2 Language in urlですが、これでも私のために働いていません)。

SSO アプリケーション (つまり、認証部分) を作成しました。現在、それを ZF2 アプリに移植しています (ルーターを回避したため、ほとんど機能していますが、最終的なルーティングを行う必要があります)。これらのタイプの URL のみが可能:

http[s]://domain.com/login/asfgsdgdsfgzsdgdsf/
http[s]://domain.com/login/tdhjsdgbndfnfgdnhd/
http[s]://domain.com/logout/asfgsdgdsfgzsdgdsf/
http[s]: //domain.com/info/dthnzdfbdfhgnfsd/

それらloginlogoutまたはパーツはコントローラーでもアクションでもありませんが、メソッド名であり、次におよびinfo内から SSO サービスで呼び出します。URL の残りの部分は、クライアント アプリケーションのハッシュです。IndexControllerindexAction()

ここで、ホーム ルートのみに一致するルーター構成を示します。他の部分 (メソッド名 [およびハッシュ]) が提供されると、ZF2 アプリから 404 を取得しました (したがって、少なくともアプリ コンテキスト内にいます)。

return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type'      => 'Zend\Mvc\Router\Http\Segment',
                'options'   => array(
                    'route'     => '/',
                    'defaults'  => array(
                        'controller'    => 'SSO\Controller\Index',
                        'action'        => 'index',
                        'act'           => 'login', // by doing this I am able to workaround the router and work with SSO
                        'client'        => '<my_secret_hash>', // by doing this I am able to workaround the router and work with SSO
                    ),
                ),
                'child_routes' => array(
                    'action' => array(
                        'type'      => 'Zend\Mvc\Router\Http\Segment',
                        'options'   => array(
                            'route'     => '[/:act]',
                            'defaults'  => array(
                                'act' => 'login',
                            ),
                            'constraints' => array(
                                'act' => '(login|logout|info)?', // only login, logout or info are allowed
                            ),
                        ),
                        'child_routes' => array(
                            'client' => array(
                                'type'      => 'Zend\Mvc\Router\Http\Segment',
                                'options'   => array(
                                    'route'     => '[/:client]',
                                    'constraints' => array(
                                        'client'    => '[a-zA-Z0-9]+',
                                    ),
                                    'defaults'  => array(
                                        'client' => '<my_secret_hash>',
                                ),
                                'may_terminate' => true,
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
);

(私のmodule.configrouterの一部のみが提供されています...)

現在、そのルーターのみhttp[s]://domain.com[/]が一致しており、またはのいずれかがA http[s]://domain.com/(login|logout|info)[/]404エラーが発生しました。http[s]://domain.com/(login|logout|info)/adfbsDVdfbzdbxfbndzxbxfnb[/]

ルート パーツをオプションとして (テストと開発の目的で) 定義しようとしていますが、運用環境では必須です。とにかく、私もそれらをオプションではないと定義しようとしましたが、どちらも機能しませんでした。

質問:最初に定義したルート (URL)と一致するようにルーターを構成するにはどうすればよいですか?

4

1 に答える 1

3

いくつかのこと:

  • 私の推測では、そこにスラッシュが多すぎると思います - の子ルートは、/親が既に取得しているため、先頭にスラッシュを付けて定義する必要はありません
  • 2 つのネストされたルートの理由がわかりません (もちろん、構成の残りの部分がわからないので、推測です)
  • homeルートはおそらく終了する必要がLiteralあり、終了できるはずです(これも推測です)
  • 一致しない括弧が 1 つありました (おそらく「ミスペースト」か何か)。

これはあなたのために働くはずです:

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Literal',
            'may_terminate' => true,
            'options'   => array(
                'route'     => '/',
                'defaults'  => array(
                    'controller'    => 'SSO\Controller\Index',
                    'action'        => 'index',
                ),
            ),
            'child_routes' => array(
                'whateva' => array(
                    'type'      => 'Segment',
                    'may_terminate' => true,
                    'options'   => array(
                        'route'     => '[:act[/:client]]', // as Sam suggested
                        'defaults'  => array(
                            'act' => 'login',
                            'client' => 'fsadfasf32454g43g43543',
                        ),
                        'constraints' => array(
                            'act' => '(login|logout|info)',
                            'client'    => '[a-zA-Z0-9]+',
                        ),
                    ),
                ),
            ),
        ),
    ),
),
于 2013-10-16T17:58:16.547 に答える