gpt4 book ai didi

php - Zend Framework 2 路由子域到模块

转载 作者:可可西里 更新时间:2023-11-01 12:34:21 26 4
gpt4 key购买 nike

找了半天没有成功。在我放弃之前,我想问:

有没有办法将子域路由到 Zend Framework 2 中的模块?喜欢:

子域 => 模块
api.site.com => api
dev.site.com => 开发
admin.site.com => 管理
site.com => 公开
...

我试过这样做,但我无法访问默认 Controller (索引)以外的 Controller 。

'router' => array(
'routes' => array(
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'site.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
)
)
),
),

感谢您花时间帮助我。

最佳答案

Zend Framework 2 没有路由到模块的概念;所有路由映射都在 URI 模式(用于 HTTP 路由)和特定 Controller 类之间。也就是说,Zend\Mvc 提供了一个事件监听器 ( Zend\Mvc\ModuleRouteListener ),它允许您定义一个 URI 模式,该模式根据给定模式映射到多个 Controller ,从而模拟“模块路由”。要定义这样的路由,您可以将其作为您的路由配置:

'router' => array(
'routes' => array(
// This defines the hostname route which forms the base
// of each "child" route
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'site.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This Segment route captures the requested controller
// and action from the URI and, through ModuleRouteListener,
// selects the correct controller class to use
'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(
'controller' => 'Index',
'action' => 'index',
),
),
),
),
),
),
),

( Click here to see an example of this @ ZendSkeletonApplication )

不过,这只是等式的一半。您还必须使用特定的命名格式在模块中注册每个 Controller 类。这也是通过相同的配置文件完成的:

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

数组键是 ModuleRouteListener 用于查找正确 Controller 的别名,它必须采用以下格式:

<Namespace>\<Controller>\<Action>

分配给此数组键的值是 Controller 类的完全限定名称。

( Click here to see an example of this @ ZendSkeletonApplication )

注意:如果您没有使用 ZendSkeletonApplication,或者已经删除了它的默认应用程序模块,您将需要在您自己的模块之一中注册 ModuleRouteListener。 Click here to see an example of how ZendSkeletonApplication registers this listener

关于php - Zend Framework 2 路由子域到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com