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

时间:2015-12-29 10:52:43

标签: php joomla3.0 joomla-component

如何为joomla的组件创建路由器文件。我正在使用Sef 特别是网址

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,经过互联网搜索后,只能看到像这里看到的那样的答案(“参见文档”),这在我看来真的无益,而且所有文档都是页面最多的无益的。

无论如何,我首先放弃了“组件路由器”,我可以让它轻松地构建路由,但发现它不会解析任何东西,如果没有两个工作,它是毫无意义的继续。

最后,我决定在插件路径上找到答案,并从DanielCalviñoSánchez那里找到了这个非常好的插件here

然后我终于遇到了一些非常完美的joomla documentation here,它会让你准确到达你需要去的地方。

我个人认为joomla路由器需要很多工作,并且看到有很多想要升级的人的想法。我发现最后使用插件是最简单的路径,并且是全面的解决方案。

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

希望这有帮助。

答案 1 :(得分:1)

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

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,请参见命名空间Router::PROCESS_*中的Joomla\CMS\Router个常量

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

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

答案 2 :(得分:0)

查看此documentation

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

另请查看com_content/router.php作为示例