I’m currently upgrading one of our projects to CakePHP 2.0. Unfortunately the “first line” of code makes problems, and I can’t find a solution to that problem.
In CakePHP 1.3 I had an
App::import("Vendor", "facebook"); statement right before the
AppController class gets defined. The referenced file is located under
/app/vendors/facebook/facebook.php (and includes itself the
I tried many different ways to include the file now in CakePHP 2.0 according to the File naming and class loading described here: File naming and class loading changes in CakePHP 2.0
I renamed the path to
app/Vendor/Facebook/facebook.php, and tried following methods:
App::uses("Facebook", "Vendor/Facebook"); App::uses("Facebook", "Facebook"); App::uses("Facebook", "Vendor/Facebook/Facebook.php"); App::uses("Facebook", "Vendor");
Has anyone find a way to reference a vendor file yet? Because of the lazy loading the methods above do not fire an error/warning, so it’s kind of annoying to debug this…
Vendors cannot be loaded using
App::uses() in CakePHP, this is because CakePHP cannot expect external libraries to follow the same standards regarding folder and file naming. You can still use
App::import('Vendor', ...) as you did in version 1.3 of the framework.
App::import() for vendors is kind of silly, if you think about it. It is just an expensive, verbose and very silly wrapper for
In 2.0, we actually encourage people to use require or require_once for their Vendor libraries. You can get the location of the Vendor folder using
App::path('Vendor') or just
APP . 'Vendor' . DS.
Cake documentation suggest using App::uses()
However, it also states if you have a non-stanard plugin to use App::Import()
App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php'));
Assume you’r vendor file located
The following line should do the same like App:: import() in the older version of CakePHP
require_once(ROOT . DS . 'app' . DS .'Vendor' . DS . 'facebook' . DS . 'src' . DS . 'facebook.php'); $facebookApi = new facebook();