如何扩展Zend View以实现具体功能?
-
03-07-2019 - |
题
我想让设计师尽可能轻松地在视图中本地化字符串,这意味着我想这样做:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
这里的下划线表示法是必要的,以允许Poedit自动提取所有字符串以进行本地化。实施是微不足道的:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
目前,我已将此直接放在 Zend_View_Abstract
中,这很糟糕(我不想通过修改任何Zend库来实现这一点)。理想情况下,我会扩展 Zend_View_Abstract
以允许我实现我们需要的其他具体功能,但我不知道如何设置它。另一种方法可能是实现View Helper,但我知道如何执行此操作的唯一方法是使视图中的代码更加冗长。任何指针(不,不是那种)将非常感激。谢谢!
解决方案
显然忽略了我自己的路径......
- 扩展
Zend_View
- 将您的方法放在此扩展类 中
- 实例化该类(例如在您的引导程序中)
- 将其分配给ViewRenderer
- 将该viewrenderer传递给
Zend_Controller_Action_HelperBroker的
addHelper方法 - 在您的视图中使用 醇>
在/ library / MegaHAL / Zend / create View.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
在你的引导程序中:
require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php';
$view = new MegaHAL_Zend_View();
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
在您看来:
<p><?php echo $this->_("Hello");?></p>
我相信会做你想做的事,是吗?
其他提示
我认为您正在寻找一种方法来创建自定义视图助手。
示例:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
然后在你的观点中你可以使用它:
echo $this->translate("Hello, World!");
虽然我认为使用视图助手是正确的“Zend-Framework” - 这样做,你可以扩展 Zend_View
并实现你想要的所有其他方法 - 这个这样你就不会失去 Zend_View
的功能。
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
然后,您只需确保实例化新视图类并将其注册为 controller (将 Zend_Controller_Action :: $ view
实例变量设置为您的类的实例)并在您的< a href =“http://framework.zend.com/manual/en/zend.layout.options.html”rel =“nofollow noreferrer”> Zend_Layout
(使用布局时;在不使用 ViewRenderer
或 view 将视图作为配置选项传递en / zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer“rel =”nofollow noreferrer“> ViewRenderer
使用 ViewRenderer
时使用<代码> Zend_Controller_Action_Helper_ViewRenderer ::的setView()代码>
如果配置正确,Poedit可以自动从_()。
以外的函数中提取字符串