我的zend应用程序中有一个用户定义类(默认情况下)
应用程序/库/ Custom_ / Custom_Test.php
我想在side indexController.php
中的getvalueAction()中使用它我尝试在[production]
中的application.ini中包含以下行autoloaderNamespaces.custom = "Custom_"
我不想使用简单的include函数,我无法在getvalueAction()中实例化它。怎么做?
谢谢。
PS:为了清楚起见,我将在下面显示我的代码
indexController.php
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{}
public function indexAction()
{}
public function getvalueAction() {
$request = $this->getRequest();
$numb = $request->getParam('numb');
$result = Test::testFunction($numb);
$this->view->assign('result',$result);
}
public function inputAction() {
$this->view->assign('action','getvalue');
}
}
在input.phtml里面
<form name="enterNumber" method="post" action="<?php echo $this->escape($this->action)?>" >
input a number :
<input type="text" name="numb"/> <br/>
<input type="submit" value="Submit" />
</form>
<h1><?php echo "Final value id " . $this->escape($this->result); ?></h1>
的index.php
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
的application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Custom_Test.php
<?php
class CustomTest{
function testFunction($a) {
return $a*2;
}
}
?>
答案 0 :(得分:2)
动作助手就是您所需要的。
因为你说
我想在side indexController.php
中的getvalueAction()中使用它
根据官方Zend Framework的网站
Action Helpers允许开发人员注入运行时和/或按需 功能扩展到任何Action Controller 化Zend_Controller_Action。行动助手旨在尽量减少必要性 扩展抽象的Action Controller以便注入常见的 动作控制器功能。
我假设你想使用动作助手,因为动作助手是专门为此目的而设计的。
第1步。 您需要告诉助手代理您的操作助手在哪里,我通常在我的application.ini文件中执行此操作,但您也可以在frontController或Bootstrap文件中执行此操作。
#if you are using application.ini, in your application.ini add the following
resources.frontController.actionHelperPaths.Custom_Action_Helper = APPLICATION_PATH "/../library/Custom/helpers"
第2步:
创建Action Helper类时,您必须确保类extends Zend_Controller_Action_Helper_Abstract
并将文件放在已定义的帮助程序目录中Library/Custom/helpers
并像这样创建动作助手
class Custom_Action_Helper_Test extends Zend_Action_Helper_Abstract
{
public function random()
{
return 'foo';
}
}
现在帮助者已准备好在任何控制器中使用。可以使用以下语法调用它。
echo $this->_helper->Test->random();
希望这会对你有所帮助。
答案 1 :(得分:1)
从application/library/Custom_/Custom_Test.php
到
application/library/Custom/Test.php
即自定义文件夹中的Test.php
在application.ini而不是autoloaderNamespaces.custom = "Custom_"
Autoloadernamespaces[] = "Custom_"
然后只需在任何地方创建一个实例。
答案 2 :(得分:0)
application/library/Custom/Custom_Test.php //underscore not needed
在你的ini
appnamespace = "Custom_"
课程应该是这样的
Class Custom_Test{
public static function foo(){
return 'hai';
}
}
然后在任何操作中,您都可以拨打Custom_Test::foo();