0

我创建了一个带有控制器的模块。我的模块名为“App\Module\Foo”,控制器名为“App\Controller\Foo”。我已经application.config.php通过使用Zend\Mvc\Application::init(require 'config/application.config.php')->run();. (我已经设置了一个自定义启动器,与 ZF2 Skeleton 非常相似。)

'router' => array(
    'routes' => array(
        'Foo\Module\Index' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '[/]',
                'constraints' => array(
                    'controller' => 'Foo\Controller\Index'
                )
            )
        )
    )
)

据我了解,此配置会将所有到 Web 根目录的请求重定向到Foo\Controller\Index控制器。这真的必须在Foo\Module\Index数组键内还是我可以用我认为适合该路线的任何名称替换键?(只要它是唯一的)如果这是真的,这是否意味着我可以拥有 1 个具有多条路线的大模块?

另外,它怎么知道在那个控制器上调用什么方法?在 Zend 参考中,似乎没有代理接受一些参数(如操作)并将其发送到控制器内的正确方法。似乎 ZF2 神奇地知道要调用什么方法。

另一件困扰我的事情是框架如何知道视图的位置?官方参考说它会寻找{controller name}/{action name}但它会在哪里寻找,如果我没有动作变量怎么办?

当我认为模型基本上只是一个可以使用的数据结构(如用户类或权限类)而表单是一个处理通过 HTML 表单发送的实际 POST 数据的类时,我也是对的吗?

4

1 回答 1

0
  1. 您在 Route-Configuration 中分配的控制器完全取决于您。但请记住,实际上您只是分配了一个key. 所以'controller' => 'ctrl-foo'也可能是有效的,只要'ctrl-foo' => 'MyNamespace\Controller\FooController分配了一个可调用的控制器。

  2. 您在键下分配了 Controller constraints- 这是错误的 - 它需要在defaults. 那么数组就变成了'defaults => [ 'controller' => 'foo', 'action' => 'bar' ]。这会将您的路由定向到通过键分配给foo所述barAction()控制器的控制器。constraint另一方面,A就像即时验证。例如,您为您的路由分配一个 ID 参数'route' => '/:id',然后您可以告诉路由器只允许通过'constraints' => [ 'id' => '\d+' ]. 请注意,数组语法仅适用于 PHP 5.4+

  3. 你总是有一个“动作变量”。ViewManager 正是通过该配置键进行配置的view_manager。视图将在template_path_stack

  4. 正如您所提到的,模型可以只是一个 POPO。但是模型也可以更多。这是 MVC 理解的一部分,我不会在这里详细介绍。

于 2013-09-28T18:17:03.730 回答