我正在尝试通过制作自定义自动加载器在我的应用程序中使用phpThumb。
class My_Loader_Autoloader_PhpThumb implements Zend_Loader_Autoloader_Interface {
static protected $php_thumb_classes = array(
'PhpThumb' => 'PhpThumb.inc.php',
'ThumbBase' => 'ThumbBase.inc.php',
'PhpThumbFactory' => 'ThumbLib.inc.php',
'GdThumb' => 'GdThumb.inc.php',
'GdReflectionLib' => 'thumb_plugins/gd_reflection.inc.php',
);
/**
* Autoload a class
*
* @param string $class
* @return mixed
* False [if unable to load $class]
* get_class($class) [if $class is successfully loaded]
*/
public function autoload($class) {
$file = APPLICATION_PATH . '/../library/PhpThumb/' . self::$php_thumb_classes[$class];
if (is_file($file)) {
require_once($file);
return $class;
}
return false;
}
}
我将此文件保存为PhpThumb.php
文件夹中的loaders/Autoloader
。然后将此行添加到引导程序文件中:
Zend_Loader_Autoloader::getInstance()->pushAutoloader(new My_Loader_Autoloader_PhpThumb());
但是它会产生一个错误,说找不到这个类。我猜测'CustomLoader_PhpThumb.php'需要保存在其他地方。任何想法的人?
UPDATE1:
Bootstrap.php文件内容
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
$autoLoader=Zend_Loader_Autoloader::getInstance();
$resourceLoader=new Zend_Loader_Autoloader_Resource(array(
'basePath'=>APPLICATION_PATH,
'namespace'=>'',
'resourceTypes'=>array(
'form'=>array(
'path'=>'forms/',
'namespace'=>'Form_'
),
'models'=>array(
'path'=>'models/',
'namespace'=>'Model_'
),
)
));
//return $autoLoader;
$resourceLoader->addResourceType('loader', 'loaders/', 'My_Loader_');
$autoLoader->pushAutoloader($resourceLoader);
$autoLoader->pushAutoloader(new My_Loader_Autoloader_PhpThumb());
}
}
?>
答案 0 :(得分:7)
我也在使用PhpThumb和相同的自动加载器。在我的情况下,它被称为My_Loader_Autoloader_PhpThumb
,位于APPLICATION_PATH . '/loaders/Autoloader/PhpThumb.php
。
在我的Bootstrap.php中,首先我将加载程序路径加载到Zend_Loader_Autoloader,然后按下如下方式推送My_Loader_Autoloader_PhpThumb
自动加载器:
$autoLoader = Zend_Loader_Autoloader::getInstance();
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
));
$resourceLoader->addResourceType('loader', 'loaders/', 'My_Loader_');
$autoLoader->pushAutoloader($resourceLoader);
$autoLoader->pushAutoloader(new My_Loader_Autoloader_PhpThumb());
希望这会有所帮助。
答案 1 :(得分:0)
PhpThumb.php
应保存到library/CustomLoader
文件夹,您也应为此课程设置自动加载器,例如application.ini
:
autoloaderNamespaces[] = "CustomLoader_"
或Bootstrap.php
:
$autoloader->registerNamespace('CustomLoader_');
我无法尝试,我希望它有效!
答案 2 :(得分:0)
我是用另一种方式做的,更简单,没有任何自动加载器,只使用“我的”。
1.-创建一个phpThumbFolder,将库中的所有文件放入project / library / My / PhpThumb
2.-使用以下内容将名为PhpThumbFactory.php的文件创建到该文件夹中:
require_once('ThumbLib.inc.php');
class My_PhpThumb_PhpThumbFactory
{
public static function create ($filename = null, $options = array(), $isDataStream = false)
{
return PhpThumbFactory::create($filename, $options, $isDataStream);
}
}
3.-享受:
public function editimageAction()
{
//rutaImg is the physical path to my images defined in application.ini
$rutaImg = Zend_Registry::get('config')->rutaImg. "test.jpg";
//Call to our "gateway" class
$thumb = My_PhpThumb_PhpThumbFactory::create($rutaImg);
//Resize
$thumb->adaptiveResize(20, 20);
//Show
$thumb->show();
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
}
我希望它可以帮助任何人;)
Pd积。 “网关”类是为了避免修改库的任何代码,因此任何可能的更新都很容易。