首页 文章

Zend Framework 2中的模型,视图,控制器和模块之间有什么关系? [关闭]

提问于
浏览
0

我创建了一个带有Controller的模块 . 我的模块名为'App\Module\Foo',控制器名为'App\Controller\Foo' . 我已经使用 Zend\Mvc\Application::init(require 'config/application.config.php')->run(); 将Zend配置为 application.config.php . (我已经设置了一个自定义启动器,非常类似于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 数组键中,还是可以用我认为适合该路由的任何名称替换键? (只要它是唯一的)如果这是真的,这是否意味着我可以拥有一个包含多条路线的大模块?

另外,它如何知道在Controller上调用哪种方法?在Zend引用中似乎没有代理接受一些参数(如action)并将其发送到控制器内的正确方法 . 似乎ZF2通过魔法知道要调用什么方法 .

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

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

1 回答

  • 0
    • 您在路由配置中分配的控制器完全取决于您 . 但请记住,实际上你只是指定一个 key . 所以 'controller' => 'ctrl-foo' 也可以是有效的,只要有一个控制器可调用 'ctrl-foo' => 'MyNamespace\Controller\FooController 分配 .

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

    • 你总是有"action variable" . ViewManager完全通过配置键 view_manager 进行配置 . 视图将在template_path_stack中查找

    • 正如您所提到的,模型可以只是一个POPO . 但是模型也可以更多 . 这是MVC理解的一部分,我在此不再赘述 .

相关问题