Zend framework Zend动作助手
我正在学习如何使用Zend框架,并认识到action helper是非常有用的。 我已经在我的机器上设置了Zend的默认安装,但是我不知道帮助文件需要放在哪里,我需要在引导文件中放什么,以及如何使用它。有人能给我指出正确的方向吗?我不清楚ZF用户指南 谢谢Zend framework Zend动作助手,zend-framework,Zend Framework,我正在学习如何使用Zend框架,并认识到action helper是非常有用的。 我已经在我的机器上设置了Zend的默认安装,但是我不知道帮助文件需要放在哪里,我需要在引导文件中放什么,以及如何使用它。有人能给我指出正确的方向吗?我不清楚ZF用户指南 谢谢 John您可以在自己的库中放置操作助手。除了library/Zend(所有Zend内容都在其中)之外,您还可以创建library/MyLibrary文件夹(MyLibrary是任意选择的)并将操作助手放在那里 一个很好的位置是library/
John您可以在自己的库中放置操作助手。除了library/Zend(所有Zend内容都在其中)之外,您还可以创建library/MyLibrary文件夹(MyLibrary是任意选择的)并将操作助手放在那里 一个很好的位置是library/MyLibrary/Controller/Action/Helper文件夹,您需要在那里创建并放置操作助手(即Navigation.php)。在此文件中,创建类
MyLibrary\u Controller\u Action\u Helper\u Navigation
下一步是在引导过程中将动作助手添加到Zend框架的HelperBroker中。因此,在Bootstrap.php文件中创建一个新方法并添加以下函数:
protected function _initActionHelpers ()
{
Zend_Controller_Action_HelperBroker::addHelper(
new MyLibrary_Controller_Action_Helper_Navigation()
);
}
最后一句话是,您需要通过将此规则添加到application.ini来配置此库的使用:
autoLoaderNameSpaces[] = "MyLibrary_"
关于放置自定义操作助手的位置,有两个想法:
application/controllers/helpers
应用程序
文件夹中的某个位置
@Jurian已经描述了“独立库”方法。对于特定于应用程序的帮助程序,您可以执行以下操作:
对于名为myHelper的助手,在文件Application/controllers/helpers/myHelper.php
中创建一个类Application\u Controller\u helper\u myHelper
。在Bootstrap
中,您有如下功能:
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Application',
'basePath' => APPLICATION_PATH,
));
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH . '/controllers/helpers',
'Application_Controller_Helper_');
return $autoloader;
}
然后可以在控制器中使用以下命令调用您的助手:
$this->_helper->myHelper;
如您所见,这假定您正在使用appNamespace“Application”。如果没有,您可以(必须!)修改类名以适应您的环境
干杯 您可以通过
应用程序.ini
文件这样做
resources.view[] =
resources.view.helperPath.Default_View_Helper_ = APPLICATION_PATH "/views/helpers/"
然后在您的视图/助手
路径中,您可以创建一个类似Time.php
的文件。此文件将包含以下代码:
<?php
class Default_View_Helper_Time extends Zend_View_Helper_Abstract
{
public function time()
{
$date = new Zend_Date();
return $date->get(Zend_Date::TIME_MEDIUM);
}
}
?>
要在视图脚本中使用它,您将使用
<?=$this->time()?>
它将使用新的
视图\u助手显示当前时间您可以通过在应用程序.ini
中声明操作助手名称空间和路径来避免在Bootstrap.php
中注册操作助手名称空间和路径,如下所示:
resources.frontController.actionHelperPaths.My_Controller_Action_Helper = APPLICATION_PATH "/controllers/helpers"
只需将My\u Controller\u Action\u Helper
替换为所需的名称空间,并相应地修改helpers目录路径
可以使用相同的方法初始化帮助器:
$this->_helper->myHelper;
正如文档中提到的,注册helpers的前缀或路径通常是首选的,因为helpers在被调用之前不会被初始化,就像上面的代码片段一样
当然,实例化助手并将其传递给代理有点困难
时间和资源密集型,因此有两种方法可以实现自动化
略加说明:addPrefix()和addPath()
将配置条目添加到application.ini
遵循相同的建议模式。小提示,由于您是使用application\u path
启动路径,因此您的“/application/controllers/helpers”应该只是“/controllers/helpers”,而不使用/application
。我还发现前缀'Application\u Controller\u Helper.
不必与物理文件夹结构匹配。如果将前缀(第二个参数)设置为Blabla_
,只要操作助手类都以Blabla_Helpername
开头,它就可以工作。这有助于减少类名,如果这对您很重要的话。当然+1是一个很好的答案。哦!你说得对:应用程序
路径已经包含在应用程序路径中。很抱歉纠正我的回答。当然,您是对的:因为您可以在addPath()
调用中定义映射,所以您几乎可以使用任何想要的类名。我倾向于在我自己的库名称空间中模仿Zend结构,即使它们稍微长一点。例如,我通常将一个插件命名为My\u Controller\u plugin\u SomePlugin
,但我经常看到其他人使用类似My\u plugin\u SomePlugin
。正如您所观察到的,只要您的addPath()
调用正确映射它,任何一种方法都可以工作。谢谢,干杯!;-)您好,我如何在我的应用程序控制器帮助程序上调用视图帮助程序。。?