0

MVC ルーティングについて質問があります。

次のように、module.config.php でルートを設定しました。

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

次のようなルートがあります。

/album
/album/page/2
/album/edit/3
/album/add

ビュースクリプトでは、次を使用します。

<a href="<?php echo $this->url('album/default', array('action'=>'edit', 'id' => $album->id));?>">Edit</a>

その結果、

/album/page/1/edit/2

これは、URLをどのように見せたいかではありません。URL を /album/edit/3 のようにしたい

また、url パラメーター配列にページ番号を指定していなかったので、既定のページが取得されるとは思っていませんでした。

必要なルーティングを設定するためのよりスマートな方法があると確信しており、ポインタをいただければ幸いです。

ピーター

4

1 に答える 1

0

次のようにmodule.config.phpのルートを変更します

'router' => array(
    'routes' => array(
        'album' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/album',
                'defaults' => array(
                    'controller' => 'Trade\Controller\Album',
                    'action' => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'add' => array(
                    'type' => 'Literal',
                    'options' => array(
                        'route' => '/add',
                        'defaults' => array(
                            'action' => 'addalbum',
                        ),
                    ),
                ),
                'edit' => array(
                    'type' => 'Segment',
                    'options' => array(
                        'route' => '/edit[/:id]',
                        'constraints' => array(
                            'id' => '[0-9]+',
                        ),
                        'defaults' => array(
                            'action' => 'editalbum',
                        ),
                    ),
                ),
                'page' => array(
                    'type' => 'Segment',
                    'options' => array(
                        'route' => '/page[/:id]',
                        'constraints' => array(
                            'id' => '[0-9]+',
                        ),
                        'defaults' => array(
                            'action' => 'pagealbum',
                        ),
                    ),
                ),
            ),
        ),
    ),
),

ビュースクリプトのリンクを次のように変更します

<a href="<?php echo $this->url('album/edit', array('id'=>$album->id)); ?>">Edit</a>

あなたのルートは今大丈夫です。

于 2013-02-26T17:47:51.567 に答える