2013-10-01 7 views
3

Мы хотим использовать библиотеку FPDF в одном из наших контроллеров.CakePHP: невозможно загрузить класс из пользовательского пакета

Мы создали следующие файлы:

app 
-Lib 
--Fpdf 
---files.php 
---fpdf.php 
---fdpf_wrapper.php <-- this is our class (FdpfWrapper) which extends the base FPDF class 

Прямо перед классом контроллера, мы пытаемся это:

App::uses('FpdfWrapper', 'Lib/Fpdf'); 

Но это терпит неудачу каждый раз. Что мы делаем не так?

+0

Вы пробовали изменяя имя файла 'fdpf_wrapper.php' на' FpdfWrapper.php' и попробуйте только с помощью 'App :: uses ('FpdfWrapper', 'Lib');'? Кроме того, я уверен, что вы прочитали [это] (http://stackoverflow.com/questions/11450519/cakephp-i-cant-get-appuses-to-find-my-class), но не могли быть ошибкой с файлом (синтаксис, логика и т. д.) вместо того, чтобы cakephp не находил класс? Если это не сработает, можете ли вы быть более конкретным и сказать * что * не удается каждый раз и как? 'Класс не найден ошибка' или что-то еще? – Nunser

+0

@Nunser это была не найденная ошибка класса. В настоящее время мы работаем с 'App :: import ('Vendor', bla bla);'. Не уверен, является ли Vendor или Lib наиболее подходящим местом для этого. – emersonthis

+0

Это зависит от того, является ли это сторонней библиотекой или нет ([doc reference] (http://book.cakephp.org/2.0/en/getting-started/cakephp-folder-structure.html#the-app-folder)). Это? и изменение имени файла на то, что я указал, не сработало? – Nunser

ответ

4

Прежде всего, пути пакетов должны быть зарегистрированы для использования с App::uses, а Lib/Fpdf - нет такого, по умолчанию регистрируются только основные пакеты.

Вы можете либо расширить пути для уже существующего пакета, в вашем случае это будет Lib:

App::build(array('Lib' => array(APP . 'Lib' . DS . 'Fpdf' . DS))); 

И затем использовать App::uses('FpdfWrapper', 'Lib');

http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#adding-paths-for-app-to-find-packages-in

или лучше добавить новый пакет :

App::build(array('Lib/Fpdf' => array(APP . 'Lib' . DS . 'Fpdf' . DS)), App::REGISTER); 

http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#add-new-packages-to-an-application

Затем вы можете использовать App::uses('FpdfWrapper', 'Lib/Fpdf');

И последнее, но не в последнюю очередь, конечно, имя файла должно соответствовать соглашениям CakePHP, как уже упомянутые @Nunser, т.е. fdpf_wrapper.php должен быть переименован в FdpfWrapper.php

1

Мой случай было немного иначе.

Чтобы сделать App::uses('ExampleAPI', 'ExampleAPI') работы убедитесь, что:

  • /Lib/ExampleAPI/ExampleAPI.php существует и читаемые
  • /Lib/ExampleAPI/ExampleAPI.php содержит class ExampleAPI{} декларации
  • вы звоните new ExampleAPI в ссылающемся коде
Смежные вопросы