>我创建了一个带有控制器的模块。我的模块称为"App''Module''Foo",控制器称为"App''Controller''Foo"。我已经通过使用Zend'Mvc'Application::init(require 'config/application.config.php')->run();
配置了Zend通过application.config.php
。(我已经设置了一个自定义启动器,与ZF2骨架启动器非常相似。
'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数据的类时,我是否正确?
-
您在路由配置中分配的控制器完全由您决定。但请记住,实际上您只是在分配一个
key
。因此,只要存在可调用'ctrl-foo' => 'MyNamespace'Controller'FooController
分配的控制器,'controller' => 'ctrl-foo'
也可能有效。 -
您在键
constraints
下分配了控制器 - 这是错误的 - 它需要在defaults
下。然后数组变为'defaults => [ 'controller' => 'foo', 'action' => 'bar' ]
。这会将您的路由定向到由密钥foo
分配给所述控制器barAction()
的控制器。另一方面,constraint
就像是即时验证。例如,您使用 ID 参数分配路由'route' => '/:id'
然后您可以告诉路由器仅允许通过'constraints' => [ 'id' => ''d+' ]
的数值。请注意,数组语法仅为 PHP 5.4+ -
你总是有一个"动作变量"。视图管理器完全通过该配置键
view_manager
进行配置。视图将在template_path_stack
中查找 -
正如您提到的,模型可以只是一个 POPO。但模型也可以更多。不过,这是MVC理解的一部分,我不会在这里详细介绍。