zend框架2添加新的控制器

时间:2012-09-20 07:00:53

标签: zend-framework2

我们需要在哪些文件中进行更改才能在Module中添加新控制器并通过URL调用它。

是否有一种方法可以添加新的控制器文件并通过url调用它而无需更改任何其他配置文件。

在控制器文件中每次添加或编辑时都要对配置文件进行更改非常繁琐。

3 个答案:

答案 0 :(得分:9)

我在丹尼尔所说的“确保你有一条满足你目的的匹配路线......”中加入了一点澄清。为了我的目的,我试图容纳到module / Application / src / Application / Controller / IndexController.php和module / Application / src / Application / Controller / ProfileController.php的路由,但是我很难解决任何问题到我的ProfileController。还不清楚ZF2是否可以在单个模块中容纳多个控制器。我当然认为必须这样做!鉴于以上两个控制器,这就是我在module / Application / config / module.config.php中制作我的'router'数组的方法。

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route'    => '/',
                'defaults' => array(
                    'controller' => 'Application\Controller\Index',
                    'action'     => 'index',
                ),
            ),
        ),
        'application' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/application',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller'    => 'Index',
                    '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(
                        ),
                    ),
                ),
            ),
        ),

        'profile' => array(
            'type' => 'literal',
            'options' => array(
                'route' => '/profile',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller'    => 'Profile',
                    'action'        => 'index',
                ),
            ),
        ),
    ),
),

这也是我的'controllers'invokables在modules.config.php成功后的样子。

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
        'Application\Controller\Profile' => 'Application\Controller\ProfileController'
    ),
),

答案 1 :(得分:4)

要创建新控制器,至少要

  • 创建控制器类
  • 确保您拥有符合您目的的匹配路线(您可以使用现有路线以及为特殊目的创建新路线)
  • 在您的模块controllers.invokables中创建module.config.php条目。

这三个简单步骤无法解决。我不明白为什么在添加控制器时调整module.config.php应该是一个问题 - 这就是配置文件的用途。包括打开,保存和关闭,这需要大约。 10-15秒。你不会创建数百个控制器,是吗?

答案 2 :(得分:-1)

来自Zend Framework 2参考

  

我们告知应用程序我们期望在中的控制器   应用。这是为了防止有人请求任何服务   ServiceManager在尝试破坏应用程序时知道。该   调度程序使用一个只会拉动的特殊的作用域容器   特别注册的控制器,或者是   可以上课或通过工厂。

src:  http://framework.zend.com/manual/2.0/en/modules/zend.mvc.quick-start.html#create-a-route

  

添加控制器与路由无关,但切线除外   由于开发人员希望能够在中指定控制器   URL。这是一个安全问题,因为我们对待控制器   作为服务。

     

这是努力(a)明确控制器是什么   可用,以及(b)默认是安全的。

正如Matthew Weier O'Phinney所说。