1

コントローラーの編集アクションにルーティングしようとしていますが、成功していません。以下は私のmodule.config.phpファイルの内容です。Zend フレームワーク 2 を使用しています。コントローラーですべてのアクションをルーティングする必要がありますか?

<?php
 return array(
'controllers' => array(
    'invokables' => array(
        'Manager\Controller\Index' => 'Manager\Controller\IndexController',
    ),
),
'router' => array(
    'routes' => array(
        'manager' => array(
            'type'    => 'Literal',
            'options' => array(
                // Change this to something specific to your module
                'route'    => '/manager',
                'defaults' => array(
                    // Change this value to reflect the namespace in which
                    // the controllers for your module are found
                    '__NAMESPACE__' => 'Manager\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                // This route is a sane default when developing a module;
                // as you solidify the routes for your module, however,
                // you may want to remove it and replace it with more
                // specific routes.
                'default' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/[:controller[/:action]]',
                        'constraints' => array(
                            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),
            ),
        ),

    ),
),
'view_manager' => array(
    'template_path_stack' => array(
        'Manager' => __DIR__ . '/../view',
    ),
),

);
4

4 に答える 4

1

あなたが新しいと仮定すると、CRUD のアプリケーションに取り組んでいる場合に知っておく必要があることがいくつかあります。ZF2 スケルトン アプリまたはアルバム アプリのガイドに従って、新しいモジュールを作成する必要があることをお勧めします。提供した設定は正しいです。そして何も悪いことはありません。

すでに新しいモジュールを作成しており、新しいモジュールに取り組んでおり、すべてのルートが適切に定義されていると仮定しましょう。モジュールの名前を application.config.php ファイルに含める必要があります。このファイルは config フォルダーの下にあります。すでにbeモジュールを作成してから、このセクションにその名前を追加します

     'modules' => array(
    'ZendDeveloperTools',
    'DoctrineModule',
    'DoctrineORMModule',
    'Application,
     'newlyCreatedModule'

      ),

上記は私のファイルの 1 つからのスニペットの一部なので、混同しないでください。詳細については、ZF2 のアルバム アプリケーションに従ってください。また、すべてのモジュールに提供する必要がある module.config.php ファイルで、ZF2 によって処理されるコントローラーにルートを記述する必要はありません。

于 2013-08-25T21:15:02.960 に答える
0

ルートを設定する方法は次のとおりです。

/manager[/:controller[/:action]]

つまり、検索する URL はおそらく次のとおりです。

/manager/manager/edit

child-route は現在のルート定義の付録にすぎないことを理解する必要があります。だからあなたができることは、@Finbarrが提案したことです。または、少し高速で次のようになるネストされたルートを使用します。

'manager' => array(
    'type'    => 'Zend\Mvc\Http\Literal',
    'options' => array(
        'route'    => '/manager',
        'defaults' => array(
            'controller' => 'Manager\Controller\Index',
            'action'     => 'index'
        )
    ),
    'may_terminate' => true,
    'child_routes'  => array(
        'add' => array(
            'type'    => 'Zend\Mvc\Http\Literal',
            'options' => array(
                'route' => '/add'
            ),
            'defaults' => array(
                'action' => 'add',
            ),
        ),
        'edit' => array(
            'type'    => 'Zend\Mvc\Http\Segment',
            'options' => array(
                'route'    => '/edit[/:id]',
                'defaults' => array(
                    'action' => 'edit',
                ),
                'constraints' => array(
                    'id' => '\d+',
                ),
            )
        ),
    )
)

行われることの違いに注意してください。ルートmanagerとルートaddはどちらもLiteral. これは、これらの URL にパラメーターが添付されていないことを意味します。それらは常に持つことができますがQueryParameters、それらRouteParametersでは機能しません。

そして、ルートを取得しますedit。これは typeSegmentになりました。これは、変数である部分、つまりセグメントがあることを意味します。さらに、ルートの前に が追加され/editているため、完全な URL は少なくとも/manager/editオプションの id を含むようになります/manager/edit[/1234]。ID をオプションにするかどうかはあなた次第です。オプションにしたくない場合は、括弧を外して次のようにルート定義を作成してください'route' => '/edit/:id':

于 2013-08-26T05:52:59.797 に答える
0

みんなありがとう、私はついにそれを働かせました。module.config.php の私のコードは、Finbarr の回答で提供されているものとまったく同じです。再びです。




namespace Manager; return array( 'controllers' => array( 'invokables' => array( 'Manager\Controller\Manager' => 'Manager\Controller\ManagerController', ), ), 'router' => array( 'routes' => array( 'manager' => array( 'type' => 'segment', 'options' => array( 'route' => '/manager[/:action][/:id]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( 'controller' => 'Manager\Controller\Manager', 'action' => 'index', ), ), ), ), ), 'view_manager' => array( 'template_path_stack' => array( 'manager' => DIR . '/../view', ), ), );

于 2013-08-26T20:46:10.193 に答える
0

アクションは、ルートの一部として [/:action] を使用してコントローラーでルーティングできます。これは、同じ名前に一致するコントローラーの関数にマップされます。たとえば、例では、../manager/foo は fooAction 関数にマップされ、..manager/index は indexAction 関数にマップされます。

通常 (少なくとも私が見た例では)、編集するレコードの ID は URL のパラメーターとして渡されます。例えば。example.com/manager/edit/1

これが達成したいことである場合、ルート「[/:id]」から欠落している部分があります(以下のコードを参照)

ルーターの簡易バージョンとしてこれを試してください (module.config.php)

<?php
namespace Manager;
return array(
'controllers' => array(
    'invokables' => array(
        'Manager\Controller\Index' => 'Manager\Controller\IndexController',
    ),
),
'router' => array(
    'routes' => array(
        'manager' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '/manager[/:action][/:id]',
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id' => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Manager\Controller\Index',
                    'action' => 'index',
                ),
            ),
        ),

    ),
),
'view_manager' => array(
'template_path_stack' => array(
    'Manager' => __DIR__ . '/../view',
    ),
  ),

);

また、IndexController クラス "IndexController.php" に編集機能があることを確認してください。

public function editAction()
{

//Some code to edit the record....

}

ビューディレクトリの「edit.phtml」ファイル

于 2013-08-26T00:33:52.557 に答える