1

次のようなリンクを作成します。

somesite.com/management/users/index/delete/10

management はモジュール名、users はコントローラー、index はアクション名、delete はレコードの ID を取得するパラメーターです。このリンクを作成するには、コードのこの部分を使用しています:

        $delUrl = $this->url()->fromRoute('management-users', array(
                'controller' => 'users',
                'action' => 'index',
                'delete' => $siteData['id'],
        ));

私の設定は以下のようなものです:

    'router' => array(
    'routes' => array(
        'management-index' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/management[/:controller][/:action][/delete/:delete][/:id]',
                'constraints' => array( 
                    'delete'    => '[0-9]+' ,
                    'id'    => '[0-9]+' 
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'Management\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index' 
                ),
            ), 
        ),

    ),
), 

結果は次のとおりです。

somesite.com/management/users/delete/10

関数はデフォルトのアクションであるためアクション名を省略し、アクション名として削除を取得し、最終的に404エラーが発生します。ご覧のとおり、リンクから「削除」というフレーズを省略できないパラメーター「id」があります。URL から「delete」を省略することにより、ZF2 は「delete」ではなく「id」として入力を取得します。デフォルトのアクションも変更できません。URLにアクション名を入力するようにZF2に指示する方法はありますか?

4

1 に答える 1

0

ルートキーの名前を「manage-index」から「manage-users」に変更しますコントローラー名を「Index」から「Users」に変更して、ルートが次のようになるようにします。

'router' => array(
    'routes' => array(
        'management-users' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/management[/:controller][/:action][/delete/:delete][/:id]',
                'constraints' => array( 
                    'delete'    => '[0-9]+' ,
                    'id'    => '[0-9]+' 
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'Management\Controller',
                    'controller'    => 'Users',
                    'action'        => 'index' 
                ),
            ), 
        ),

    ),
), 

この変更を反映するために、コントローラーの定義 (呼び出し可能またはファクトリー) を変更することを忘れないでください。

于 2014-10-10T17:11:16.650 に答える