0

Catalog私のアプリケーションには、次の3つのビューを表示するモジュールがあります。

  • URIがである場合の都市のリスト/catalog/
  • %city%URIがである場合の、のスポーツのリスト/catalog/%city%
  • URIがである場合の、%sport%のコースのリスト%city%/catalog/%city%/%sport%

私のルーティングオプションは現在次のようになっています。

<?php
return array(
    ...
    'router' => array(
        'routes' => array(
            'catalog' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/catalog[/:city][/:sport][/]',
                    'constraints' => array(
                        'city'  => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'sport' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        'controller' => 'Catalog\Controller\Catalog',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),
    ...
);

私のCatalogController

class CatalogController extends AbstractActionController {

    public function indexAction() {
        return new ViewModel();
    }

    public function listCitiesAction() {} // all cities

    public function listSportsAction() {} // all sports for the city

    public function listCoursesAction() {} // all courses for the sport in the city
}

上記のアクションにマップされるようにルートを定義するにはどうすればよいですか?

どうも

4

1 に答える 1

0

できます!

'router' => array(
    'routes' => array(
        'catalog' => array(
            'type'    => 'literal',
            'options' => array(
                'route'    => '/catalog',
                'defaults' => array(
                    'controller' => 'Catalog\Controller\Catalog',
                    'action'     => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'city' => array(
                    'type'    => 'segment',
                    'options' => array(
                        'route'    => '/:city',
                        'constraints' => array(
                            'city'  => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'sport' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        ),
                        'defaults' => array(
                            'controller' => 'Catalog\Controller\Catalog',
                            'action'     => 'list-sports',
                        ),
                    ),
                    'may_terminate' => true,
                    'child_routes' => array(
                        'sport' => array(
                            'type'    => 'segment',
                            'options' => array(
                                'route'    => '/:sport',
                                'constraints' => array(
                                    'city'  => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'sport' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                ),
                                'defaults' => array(
                                    'controller' => 'Catalog\Controller\Catalog',
                                    'action'     => 'list-courses',
                                ),
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
),
于 2013-03-19T22:20:21.600 に答える