2010-03-22 5 views
6

У меня есть папка с пользовательскими классами в приложении ZF 1.10. Папка находится в/library. Как я могу сказать ZF, где они находятся? Оба application.ini и index.php устанавливают путь к библиотеке, но затем ZF не может найти файлы.Как указать zend framework, где мои пользовательские классы:

Спасибо

ответ

8

Существует множество возможных решений. Наиболее распространенное, при использовании Zend Application, чтобы зарегистрировать пространство имен в application.ini, добавив:

autoloaderNamespaces[] = "Example_" 

Других решений:

  • Добавить свои директории для include_path с помощью set_include_path() (специального раствора)
  • Следуйте соглашениям об именах PEAR (чтобы разрешить пути было возможно)

Настроить автозагрузчик в Bootstrap.php:

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace("Example"); // or Example_ 
} 

В конце концов, установить модуль или resource autoloader, например.

$resourceLoader->addResourceTypes(array(
    'acl' => array(
     'path'  => 'acls/', 
     'namespace' => 'Acl', 
    ), 
    'example' => array(
     'path'  => 'examples/', 
     'namespace' => 'Example', 
    ),   
)); 
+0

Спасибо, бразильщик, это сработало! «$ Autoloader-> registerNamespace (..» dit it! – curro

+0

Привет, довольно старое сообщение, чтобы спросить об этом, но все же вы можете мне помочь? »Zend (1.12)« У меня есть каталог «Example» и класс 'Example_Test 'непосредственно под' Example' .Я зарегистрировал пространство имен 'Example', а затем, когда я обращаюсь к классу' Example_Test' в моем коде 'php', я могу сделать это без каких-либо проблем. Но когда я смотрю на метод' getClassPath() ' внутри 'Zend_Loader_Autoloader_Resource' он не возвращает допустимый путь (coz некоторых условий), поэтому это означает, что файл не загружается методом' autoload() '. Тогда как он действительно загружается? –

1

Заканчивать this older Zend Framework tutorial from Rob Allen, в частности, на странице 4, где он говорит о загрузчике. Его новые учебные пособия, как отличные, как они полагают, полагаются на Zend Tool, чтобы сделать создание приложения и замаскировать его.

Одна вещь, которая меня беспокоила, однако, заключалась в том, что вы упомянули, что папка, которую вы пытаетесь включить, это public/library. Если вы не намерены делиться своим кодом с миром, я настоятельно рекомендую вам разместить его в другом месте ... если у вас нет другой «общедоступной» папки , а не, доступной общественности (в этом случае вы можете рассмотреть переименование, чтобы избежать путаницы в будущем).

+0

Спасибо, Cal. Извините, у меня нет библиотеки в общедоступном каталоге. Это просто ошибка. Он находится в корневой директории. – curro

+0

Учебник Роба Аллена полагается на ZF 1.5. Версия, которую я использую, - 1.10. Хотя он создает файл Bootstrap, класс Bootstrap пуст. Все работает отлично, за исключением пользовательских классов. У меня есть библиотека ZF в другом месте, и PHP включает в себя путь к ней. – curro

+0

Мясо и картофель из него должны быть set_include_path, что, я думаю, вы могли бы по крайней мере разместить в пустом классе начальной загрузки. Кроме того, Роб обновил учебники с помощью 1.10 на своем сайте. –

24

Мы часто сталкиваемся с проблемой написания собственных пользовательских функций или классов и места их размещения.

Чтобы добавить пользовательский класс (или пользовательскую библиотеку), можно использовать пространства имен автозагрузчиков zend framework.

Добавьте строку ниже в файле Application.ini

autoloaderNamespaces.custom = "Custom_" 

ИЛИ

autoloaderNamespaces[] = "Custom_" 

Всех пользовательских классов будет находиться под библиотечным каталогом. Создайте в папке библиотеки имя папки «Custom» (которое определено в application.ini).

Занятия будут начинаться с префикса «Custom_» при объявлении в файле (например, Custom_Test)

Теперь мы можем использовать этот класс как $test = new Custom_Test(), в нашем приложении.

+0

Для тех, кто смотрит на это, я думаю, этот метод является немного более предпочтительным, чем принятый ответ. –

+0

Я согласен с Angl.King.47 и Muhammad Yaseen. На мой собственный опыт это гораздо более простой и эффективный способ включения ваших собственных библиотек классов Кроме того, стандартный index.php в zend будет включать в себя li brary в пути включения PHP. –

0

Добавить свою собственную библиотеку в композитор.JSON:

"autoload": { 
"psr-0": {"Your": "vendor/My/library"} 
}, 

и запустить композитор обновление

Смежные вопросы