dongyong9224 2016-04-04 08:47
浏览 22
已采纳

ZF2路由到控制器

I have created a controller called "ActividadesPlanificadasController.php" and I have defined in my module.config the next routing but it is not work.

'publico/peticiones-incidencias-planificadas/actividades-planificadas' => array(
    'type'    => 'Literal',
    'options' => array(
        'route'    => 'publico/peticiones-incidencias-planificadas/actividades-planificadas',
        'defaults' => array(
            '__NAMESPACE__' => 'Privado\Controller',
            'controller'    => 'Index',
            'action'        => 'index',
        ),
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'default' => array(
            'type'    => 'Segment',
            'options' => array(
                //'route'    => '/[:controller[/:action[/:id]]]',
                'route'    => '/[:controller[/:action][/:id/:system]]',
                'constraints' => array(
                    'controller'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'        => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'            => '[0-9]*',
                    'system'        => '[a-zA-Z][a-zA-Z0-9_-]*'
                    //'system'  => '[0-9]*'
                ),
                'defaults' => array(
                ),
            ),
        ),
    ),
),

These are my controllers ...

    'controllers' => array(
    'invokables' => array(
        'Publico\Controller\Index' => Controller\IndexController::class,
        'Publico\Controller\Login' => Controller\LoginController::class,
        'Publico\Controller\NoAccess' => Controller\NoAccessController::class,
        'Publico\Controller\ActividadesPlanificadas'    =>  Controller\ActividadesPlanificadasController::class
    ),
),

Because I want to access to my controller with the next url: http://gnsys.local/publico/peticiones-incidencias-planificadas/actividades-planificadas

And I've got the next error ...

A 404 error occurred Page not found.

The requested controller could not be mapped to an existing controller class.

Controller: Publico\Controller\PeticionesIncidenciasPlanificadas(resolves to invalid controller class or alias: Publico\Controller\PeticionesIncidenciasPlanificadas)

No Exception available

What am I doing wrong?

Edit 1:

I have updated my module.config and it works with the route: http://gnsys.local/publico/actividades-planificadas

module.config:

                'publico/actividades-planificadas' => array(
                    'type'    => 'Literal',
                    'options' => array(
                            'route'    => 'publico/actividades-planificadas',
                            'defaults' => array(
                                    '__NAMESPACE__' => 'Publico\Controller',
                                    'controller'    => 'Index',
                                    'action'        => 'index',
                            ),
                    ),
                    'may_terminate' => true,
                    'child_routes' => array(
                            'default' => array(
                                    'type'    => 'Segment',
                                    'options' => array(
                                            //'route'    => '/[:controller[/:action[/:id]]]',
                                            'route'    => '/[:controller[/:action][/:id/:system]]',
                                            'constraints' => array(
                                                    'controller'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                    'action'        => '[a-zA-Z][a-zA-Z0-9_-]*',
                                                    'id'            => '[0-9]*',
                                                    'system'        => '[a-zA-Z][a-zA-Z0-9_-]*'
                                                    //'system'  => '[0-9]*'
                                            ),
                                            'defaults' => array(
                                            ),
                                    ),
                            ),
                    ),
            ),

    'controllers' => array(
    'invokables' => array(
        'Publico\Controller\Index' => Controller\IndexController::class,
        'Publico\Controller\Login' => Controller\LoginController::class,
        'Publico\Controller\NoAccess' => Controller\NoAccessController::class,
        'Publico\Controller\ActividadesPlanificadas'    =>  Controller\ActividadesPlanificadasController::class
    ),
),

But I want that my route to access to ActividadesPlanificadasController would be: http://gnsys.local/publico/peticiones-incidencias-actividades/actividades-planificadas

If I change my module.config to ...

'publico/peticiones-incidencias-planificadas/actividades-planificadas' => array(
'type'    => 'Literal',
'options' => array(
    'route'    => 'publico/peticiones-incidencias-planificadas/actividades-planificadas',
    'defaults' => array(
        '__NAMESPACE__' => 'Publico\Controller',
        'controller'    => 'Index',
        'action'        => 'index',
    ),
),
'may_terminate' => true,
'child_routes' => array(
    'default' => array(
        'type'    => 'Segment',
        'options' => array(
            //'route'    => '/[:controller[/:action[/:id]]]',
            'route'    => '/[:controller[/:action][/:id/:system]]',
            'constraints' => array(
                'controller'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                'action'        => '[a-zA-Z][a-zA-Z0-9_-]*',
                'id'            => '[0-9]*',
                'system'        => '[a-zA-Z][a-zA-Z0-9_-]*'
                //'system'  => '[0-9]*'
            ),
            'defaults' => array(
            ),
        ),
    ),
),
),

I've got the error

A 404 error occurred Page not found.

The requested controller could not be mapped to an existing controller class.

Controller: Publico\Controller\PeticionesIncidenciasPlanificadas(resolves to

invalid controller class or alias: Publico\Controller\PeticionesIncidenciasPlanificadas)

No Exception available

What am I still doing wrong?

  • 写回答

1条回答 默认 最新

  • duanhuiuw12555 2016-04-04 11:50
    关注

    You point to a controller called 'Privado\Controller\Index' but your invokable is called 'Publico\Controller\Index'.

    Change the namespace so it corresponds.

    Privado -> Publico
    

    or

    Publico -> Privado 
    

    or add a controller for 'Privado\Controller\Index'

    'invokables' => array(
        'Privado\Controller\Index' => //your privado controller,
        //...other controllers...
    )
    

    UPDATE

    Make also sure you have an invokable controller class in the correct namespace. So if you register like this:

    'invokables' => array(
        'Privado\Controller\Index' => 'Privado\Controller\IndexController'
    )
    

    You need a controller class in a php file called IndexController.php in the folder Privado - Controller

    - Privado
      - Controller
        - IndexController.php
    

    And the class should have the correct name and namespace constant:

    <?php
    namespace = Privado\Controller;
    
    class IndexController extends ... {
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面