12

私は zend フレームワーク 2 で作業しています。すべてのルートにセグメント タイプを使用していますが、zend スケルトン アプリケーションでリテラル ルート タイプが使用されていることに気付きました。彼らは何ですか?

4

2 に答える 2

19

セグメントルートがすでにこの機能をカバーしている場合、Umairが実際に求めているのは、文字通りのルートの目的は何かと思います。

簡単に説明すると、セグメントルートは、生成された正規表現を使用して入力に対してかなり複雑なマッチングを行いますが、リテラルルートは単純な文字列比較を行います。これにより、処理が大幅に高速化され、パラメータの一致が不要な場合に推奨されます。

于 2013-02-25T04:31:47.793 に答える
14

以下の基本的な例のように、文字通りのルートは1回限りのページに適しているようです。

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Literal',
            'options' => array(
                'route' => '/home',
                'defaults' => array(
                    'controller' => 'homeController',
                    'action' => 'index',
                )
            )
        )
    )
)

セグメントルートに詳しくない方のために。これらは動的であり、URLセグメントをコントローラーに渡します。この例は、ZendFramework2入門チュートリアルからのものです

'router' => array(
    'routes' => array(
        'album' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/album[/:action][/:id]',
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'     => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Album\Controller\Album',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),

actionセグメントは、その名前のコントローラーの関数に移動します。したがって、のようなURLはの関数に/album/edit/2移動します。コントローラでは、いくつかの方法でにアクセスできます。editAction()AlbumControllerid

$id = $this->params()->fromRoute('id');

また

$id = $this->getEvent()->getRouteMatch()->getParam('id');
于 2013-02-21T03:10:08.143 に答える