emersonthis
emersonthis

Reputation: 33378

CakePHP: Unable to load class from custom package

We want to use the FPDF library in one of our controllers.

We created the following files:

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

Right before the controller class, we try this:

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

But it fails every time. What are we doing wrong?

Upvotes: 3

Views: 4297

Answers (2)

ᴍᴇʜᴏᴠ
ᴍᴇʜᴏᴠ

Reputation: 5256

My case was a bit different.

To make App::uses('ExampleAPI', 'ExampleAPI') work make sure that:

  • /Lib/ExampleAPI/ExampleAPI.php exists and is readable
  • /Lib/ExampleAPI/ExampleAPI.php contains class ExampleAPI{} declaration
  • you call new ExampleAPI in the referring code

Upvotes: 2

ndm
ndm

Reputation: 60463

First of all, package paths must be registered in order to be used with App::uses, and Lib/Fpdf is no such one, by default only the core packages are registered.

You could either extend the paths for an already existing package, in your case that would be Lib:

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

And then use App::uses('FpdfWrapper', 'Lib');

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

or better add a new package:

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

Then you can use App::uses('FpdfWrapper', 'Lib/Fpdf');

And last but not least, of course the filename must follow the CakePHP conventions as already mentioned by @Nunser, ie fdpf_wrapper.php must be renamed to FdpfWrapper.php

Upvotes: 4

Related Questions