在使用phalcon过程中,发现在同一个控制器流程中无法重复使用 $this-tag->prependTitle($title)
来达到反复拼接文档title的目的,查看源代码发现每次执行prependTitle方法是简单的直接赋值而不是拼接:
public static function prependTitle(string title) -> void
{
let self::_documentPrependTitle = title;
}
看了一些tag的其他方法好像无法直接在di中实现想要的功能,于是决定重写一下这个方法:
- 在loader相关文件增加扩展命名空间:
$loader = new \Phalcon\Loader();
$loader->registerNamespaces([
//其他命名空间
'Extend' => APP_PATH . '/extend', //phalcon方法重写目录
])->register();
- 在extend文件中新建Tag.php,内容如下:
<?php
namespace Extend;
class Tag extends \Phalcon\Tag
{
//重写Phalcon\Tag的prependTitle方法,可以在同一个控制器中反复使用prependTitle增加标题
public static function prependTitle($title)
{
parent::setTitle($title . parent::getTitleSeparator() . strip_tags(parent::getTitle()));
}
}
- di注入
$di->set('tag', function () {
return new Extend\Tag();
});
- 然后该方法可反复使用
$this->tag->prependTitle('标题1');
$this->tag->prependTitle('标题2');