2013-02-14 11 views
11

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

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

答えて

17

私はUmairが実際に求めているものを推測するリテラルルートの目的は、セグメントルートはすでにこの機能をカバーしていたときに、何であるか、です。

いくつかの言葉で説明します。セグメント経路は生成された正規表現との入力に対してかなり複雑なマッチングを行いますが、リテラル経路は単純な文字列比較を行います。これにより、処理速度が大幅に向上し、パラメータマッチングが必要ない場合は優先されるべきです。

12

リテラル経路は、以下の基本的な例のような一回限りのページの良いと思われます。これらは動的であり、URLセグメントをコントローラに渡します。この例では、Zend Frameworkの2が

'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セグメントは、その名前のコントローラ内の関数に行きます入門チュートリアルからです。したがって、/album/edit/2のようなURLは、AlbumControllereditAction()機能に移動します。 idには、コントローラでいくつかの方法でアクセスできます。

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

または

$id = $this->getEvent()->getRouteMatch()->getParam('id'); 
関連する問題