где сохранить пользовательские автозагрузчики в Zend? - PullRequest
5 голосов
/ 21 февраля 2011

Я пытаюсь использовать 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' должен быть сохранен в другом месте.Любая идея, ребята?


Обновление 1:

Содержимое файла 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());
    }


}

?>

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Я также использую 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());

Надеюсь, это поможет.

0 голосов
/ 27 марта 2012

Я сделал это по-другому, гораздо проще, без автозагрузчика, просто используя «My».

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 Класс «шлюз» должен избегать изменения любого кода библиотеки, поэтому любое возможное обновление легко.

0 голосов
/ 21 февраля 2011

PhpThumb.php должен быть сохранен в папке library/CustomLoader, и вы также должны настроить автозагрузчик для этого класса, например, в application.ini:

autoloaderNamespaces[] = "CustomLoader_"

или в Bootstrap.php:

$autoloader->registerNamespace('CustomLoader_');

Я не мог попробовать, я надеюсь, что это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...