1

私は zend フレームワーク 2 を初めて使用し、アルバム モジュールを ZF2 のスケルトン アプリケーションに追加しようとしましたが、404 エラーが発生しました ページが見つかりません。要求された URL はルーティングによって一致しませんでした。私の Album/config/module.config.php コードは

<?php
    return array(
        'controllers' => array(
            'invokables' => array(
                'Album\Controller\Album' => 'Album\Controller\AlbumController',
            ),
        ),
        'view_manager' => array(
            'template_path_stack' => array(
                'album' => __DIR__ . '/../view'
             ),
         ),
        'router' => array(
            'routes' => array(
                'album' => array(
                    //'type' => 'segment',
                    'type' => 'Zend\Mvc\Router\Http\Literal',
                    'options' => array(
                        //'route' => '/album[/][:action][/:id]',
                        //'route'       => '/:controller[.:formatter][/:id]',
                        'route' => '/album',
                        'constraints' => array(
                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'formatter'  => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id' => '[0-9]+',
                        ),
                        'defaults' => array(
                             '__NAMESPACE__' => 'Album\Controller',
                            'controller' => 'Album\Controller\Album',
                            'action' => 'index',
                        ),
                    ),
                ),
            ),
        ),
    );

Application/config/module.config.php に次の行を追加しました。

'modules' => array(
        'Application',    
        'Album'
    ),
    'module_listener_options' => array(
        'config_glob_paths' => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),

誰でもコードを修正するのを手伝ってもらえますか...

4

3 に答える 3

1

問題は Route-Configuration 内にあります:

'defaults => array(
    '__NAMESPACE__' => 'Album\Controller',
    'controller'    => 'Album\Controller\Album',
)

これにより、ルーターに次のクラスをロードするように指示します

Album\Controller\Album\Controller\Album

として割り当てた__NAMESPACE__ものの先頭に が追加されますcontroller。したがって、次の 2 つのオプションがあります。

  1. をスキップ__NAMESPACE__
  2. 変更するcontroller

これは完全にあなた次第ですが、個人的にはスキップすることにしまし__NAMESPACE__た.

于 2013-09-30T05:56:08.363 に答える
0

ZendSkeletonApplication の Application モジュールのような構成を使用する必要があります。

'router' => array(
    'routes' => array(
        'album' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/album',
                'defaults' => array(
                    '__NAMESPACE__' => 'Album\Controller',
                    'controller'    => 'Album',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                '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(
                        ),
                    ),
                ),
            ),
        ),
    ),
),

次のコードを追加するだけです。

'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(
                            '__NAMESPACE__' => 'Album\Controller',
                            'controller'    => 'Album',
                            'action'        => 'index',
                        ),
                    ),
                ),

このコードを「child-routes」キーに追加すると、url: localhost/module[/:controller][/:action][/:id] にアクセスできます。そして今、それはうまくいきました!

于 2014-04-22T13:57:56.497 に答える