6

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

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

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

4

3 回答 3

9

我正在对丹尼尔所说的“确保你有一条满足你的目的的匹配路线......”做一点澄清。出于我的目的,我试图容纳到模块/应用程序/src/应用程序/控制器/索引控制器.php和模块/应用程序/src/应用程序/控制器/配置文件控制器.php的路由,但是我努力解决我的配置文件控制器的任何问题。ZF2 是否可以在单个模块中容纳多个控制器也不清楚。我想肯定是必须的,而且确实如此!鉴于上述两个控制器,这就是我在 module/Application/config/module.config.php 中制作“路由器”数组的方式。

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

这也是成功后我的“控制器”可调用对象在 modules.config.php 中的样子。

'controllers' => array(
    'invokables' => array(
        'Application\Controller\Index' => 'Application\Controller\IndexController',
        'Application\Controller\Profile' => 'Application\Controller\ProfileController'
    ),
),
于 2013-01-04T12:14:44.350 回答
4

要创建一个新的控制器,您至少需要

  • 创建控制器类
  • 确保您有一条满足您的目的的匹配路线(您可以采用现有的路线,也可以为特殊目的创建一条新路线)
  • 在模块controllers.invokablesmodule.config.php.

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

于 2012-09-20T07:23:51.357 回答
-1

来自 Zend Framework 2 参考

我们通知应用程序我们希望在应用程序中拥有的控制器。这是为了防止有人请求 ServiceManager 知道的任何服务以试图破坏应用程序。调度程序使用一个特殊的作用域容器,它只会拉取专门注册到它的控制器,作为可调用类或通过工厂。

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

添加控制器与路由无关,只是因为开发人员希望能够在 URL 中指定控制器。这是一个安全问题,因为我们将控制器视为服务。

这是一项努力(a)明确哪些控制器可用,以及(b)默认情况下是安全的。

正如 Matthew Weier O'Phinney 所说。

于 2013-05-27T04:02:23.877 回答