ZF2路由到控制器

时间:2016-04-04 08:47:13

标签: php routing zend-framework2

我创建了一个名为" ActividadesPlanificadasController.php"我在我的module.config中定义了下一个路由,但它不起作用。

'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(
                ),
            ),
        ),
    ),
),

这些是我的控制器......

    '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
    ),
),

因为我想使用下一个网址访问我的控制器:http://gnsys.local/publico/peticiones-incidencias-planificadas/actividades-planificadas

我有下一个错误......

  

发生404错误   页面未找到。

     

请求的控制器无法映射到现有的控制器类。

     

控制器:       Publico \ Controller \ PeticionesIncidenciasPlanificadas(解析为无效的控制器类或别名:Publico \ Controller \ PeticionesIncidenciasPlanificadas)

     

没有例外

我做错了什么?

编辑1:

我更新了我的module.config,它适用于路线: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
    ),
),

但是我希望我访问ActividadesPlanificadasController的路线是:http://gnsys.local/publico/peticiones-incidencias-actividades/actividades-planificadas

如果我将module.config更改为...

'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(
            ),
        ),
    ),
),
),

我收到了错误

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
     

无效的控制器类或别名:   检察署\控制器\ PeticionesIncidenciasPlanificadas)

No Exception available

我还有什么问题?

1 个答案:

答案 0 :(得分:1)

您指向一个名为'Privado\Controller\Index'的控制器,但您的invokable称为'Publico\Controller\Index'

更改namespace以使其对应。

Privado -> Publico

Publico -> Privado 

或为'Privado\Controller\Index'

添加控制器
'invokables' => array(
    'Privado\Controller\Index' => //your privado controller,
    //...other controllers...
)

更新

确保在正确的命名空间中有一个可调用的控制器类。所以如果你这样注册:

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

你需要一个名为IndexController.php的php文件中的控制器类Privado - Controller

- Privado
  - Controller
    - IndexController.php

该类应具有正确的名称和名称空间常量:

<?php
namespace = Privado\Controller;

class IndexController extends ... {

}