解决了!!!
似乎当您尝试在模块的 URL 中使用不同的名称时,Yii 失去了它的大脑。我试图传递 $defaultController 和 $defaultAction,以及其他大约 10 个东西。我不知道如何覆盖 Yii 在我的模块“ezpaypal”上设置的映射,因此我可以将其 URL 更改为“billing”,但仍指向“/modules/ezpaypal”。
首先,使用 Gii 创建一个模块。我将我的命名为“ezpaypal”。轰隆隆,一切都生成了。
将您的模块名称添加到 config.php:
'modules'=>array(
'ezpaypal'
),
问题是,我不想在 URL 中看到“ezpaypal”。我希望它是可变的,所以它可以是“/billing”或“/checkout”。所以我需要模块保持命名为“ezpaypal”。我尝试并尝试了规则,并遇到了很多问题。
似乎 Yii 为“ezpaypal”创建了根别名,因为它是我加载的模块。如果您像往常一样使用它,它确实可以正常工作。它知道要使用的控制器,一切。
当你使用 urlManager 规则将 "billing" 映射到 "ezpaypal" 以更改 URL 中的名称时,Yii 不再知道使用哪个默认控制器。它也不知道要采取什么默认操作,例如 /controller/3 它不知道要执行 /controller/view/3。Yii刚刚脑死亡。
更好的解决方案是,如果 Yii 确实有一种“隐藏”或不那么为人所知的方式来处理这个问题?我不确定 Yii 框架在哪里解析配置并加载模块。也许在那里我可以找到一个函数或要设置的变量,无需冗长的 url 管理器规则即可解决此问题。它可以正确处理“ezpaypal”的模块 url 规则,而无需向 urlmanager 添加任何内容......
不过,一个简单的解决方法是编写您的 URL 管理器规则来处理每个可能的组合。也许有人可以把它清理成更少的行?
'rules'=>array(
// EZPayPal Friendly URL Support - DO NOT TOUCH!
'<module:(billing)>'=>'ezpaypal',
'<module:(billing)>/index'=>'ezpaypal/default/index',
'<module:(billing)>/<controller:\w+>'=>'ezpaypal/<controller>',
'<module:(billing)>/<controller:\w+>/<id:\d+>'=>'ezpaypal/<controller>/view',
'<module:(billing)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'ezpaypal/<controller>/<action>',
'<module:(billing)>/<controller:\w+>/<action:\w+>'=>'ezpaypal/<controller>/<action>',
),
工作:)
如果有人在做同样的事情,为您的模块使用不同的 URL 路径,只需将“billing”更改为 URL 中您想要的名称,将“ezpaypal”更改为模块目录的实际名称。
PS:上面的规则可以简化吗?我不知道。看来这是一个完美的组合。如果我删除一个,那条路线就会中断。此外,我仍在寻找一种更简单的方法,以便我们可以在没有 urlmanager 的情况下覆盖它。