如何在joomla中为组件创建路由器


How to create router for a component in joomla?

如何为joomla组件创建路由器文件。我正在使用Sefurl,特别是

我也遇到了同样的问题,在互联网上搜索后,只遇到了像这里看到的答案("查看文档"),在我看来,这真的没有帮助,在所有文档中,该页面是最没有帮助的。

无论如何,我最初放弃了"组件路由器",我可以让它轻松地构建路由,但发现它无法解析任何内容,如果两者都不起作用,继续下去就毫无意义。

最后,我决定走插件之路就是答案,并从Daniel Calviño Sánchez那里找到了这个非常好的插件。

然后,我终于在这里找到了一些joomla文档,这些文档非常完美,可以让你准确地到达你需要去的地方。

我个人认为joomla路由器需要大量的工作,并且看到人们有很多想法想要升级它。我发现最终使用插件是最简单的方法,也是更好的解决方案。

我很乐意与任何人讨论为什么我的组件路由器不会调用它的解析方法,就好像这真的有效一样,这将是我的第一选择。

希望这能有所帮助。

不幸的是,文档没有提供注册路由器的方法,所以我找到了一个替代解决方案。

router.php实际上是一个Joomla'CMS'Router'SiteRouter

即使您认为自己不在类中,也可以使用$this变量。

这可以通过执行var_dump($this) 进行检查

有两种方法可以使用。

$this->attachBuildRule(function(){
    // build rule code
});
$this->attachParseRule(function(){
   // parse rule code
});

如果您使用的是实现RouterInterface的对象,则回调如下

$this->attachBuildRule([$myRouter, 'build']);
$this->attachParseRule([$myRouter, 'parse']);

这些方法需要一个可调用的和一个STAGE,请参阅命名空间Joomla'CMS'Router 中的Router::PROCESS_*常量

如果您正在使用PHPStorm,您可以编写以下代码以获得帮助:

/**
 * @var $this Joomla'CMS'Router'SiteRouter
*/

查看此文档。

它非常精确地描述了如何创建路由以及路由如何在Joomla中工作。

还可以查看com_content/router.php作为的示例