gpt4 book ai didi

php - Zend Framework 2 默认模块

转载 作者:可可西里 更新时间:2023-11-01 00:00:45 25 4
gpt4 key购买 nike

在 ZF1 中,您不必在 URL 中包含模块;如果未提供,它将默认为...默认模块。这在 ZF2 中如何实现?我已经使用骨架应用程序启动并运行,但似乎我总是需要包含模块名称,例如/application/controller/action.

我想我可以通过创建一个带有两个“占位符”的路线来解决这个问题; Controller 和 Action ,然后将默认模块设置为“应用程序”。然后我会把它放在 /config/autoload/global.php(或者可能是 /config/application.config.php),这样路由就适用于我的所有应用程序.但是,即使我将路由硬编码为 /user/index 之类的内容,我也会收到错误消息,指出 URL 无法与路由匹配。

我尝试了下面的代码。

return array(
'router' => array(
'routes' => array(
'nomodule' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'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(
'module' => 'Application' // Not sure of the syntax here
)
)
),
)
)
);

正如我在评论中所写的那样,我不确定我的问题是否出在默认语法上,但我不这么认为,因为如果我对路由进行硬编码并删除所有默认值,也会发生同样的情况。我还尝试根据骨架应用程序中的示例对其进行试验,但没有成功。我会以错误的方式去做吗?有更好的方法吗?还是我只是犯了一个错误?

提前致谢。

编辑:有关使其工作的代码,请参阅答案。要了解如何它是如何工作的,请阅读 this article .

最佳答案

注意:强烈建议使用显式路由而不是通配符。

您在尝试中使用了 Zend\Mvc\Router\Http\Literal 路由类型,因为您可能猜到它是文字,即完全匹配。要使其正常工作,您需要分段路线类型。

Check application route in Zend Skeleton Application config它是子路由 default。它完全符合您的要求。

至于模块——从您的代码角度来看,没有“模块”这样的东西。模块在启动时注册资源,之后它不再相关。在 zf2 中,您可以按类或别名指定确切的 Controller ,在该 Controller 下向 controllerManager 注册

// module\Application\config\module.config.php
return array(
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Application\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(
'action' => 'index',
'__NAMESPACE__' => 'Application\Controller'
)
)
)
)
)
)
),
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController',
'Application\Controller\User' => 'Application\Controller\UserController'
),
)
);

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

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