I'm writing a small application in CakePHP 2.1, and I want to use Nick Baker's file upload plugin. I downloaded the cakephp2.0 branch (I know that isn't done yet), and placed it in my apps Plugin folder. I made some necessary modifications on it, but I'm curious what the right way is to replace those App::import
function calls (at start of FileUploadComponent
, FileUploadBehavior
and FileUploadHelper
classes) with the App:uses
function.
It needs to import the FileUploadSettings
class from Config/file_upload_settings.php and the Uploader
class from Vendor/upload.php. It can be done with the require_once
function, but I'm sure there is a CakePHP way to do it.
According to the Cake manual App::import()
is comparable to the way require_once()
works. From what I understand you would load classes using App:uses()
and Vendor files using App:import()
.
The API documentation says the following on the subject:
All classes that were loaded in the past using
App::import(‘Core’, $class)
will need to be loaded usingApp::uses()
referring to the correct package. This change has provided large performance gains to the framework.
- The method no longer looks for classes recursively, it strictly uses the values for the paths defined in
App::build()
- It will not be able to load
App::import('Component', 'Component')
useApp::uses('Component', 'Controller');
.- Using
App::import('Lib', 'CoreClass');
to load core classes is no longer possible. Importing a non-existent file, supplying a wrong type or package name, ornull
values for$name
and$file
parameters will result in a false return value.App::import('Core', 'CoreClass')
is no longer supported, useApp::uses()
instead and let the class autoloading do the rest.- Loading Vendor files does not look recursively in the vendors folder, it will also not convert the file to underscored anymore as it did in the past.
The migration guide also has some things to say about App:uses()
and is a good starting point in general to compare best practices for 2.0 with the older methods from 1.3 and lower.
This related question deals with loading Vendor files in Cake 2.0, I can't verify the claim by José Lorenzo that App:import()
is a "silly wrapper" for require_once()
, nor the statement that it's the preferred way of including files. The only reference I could find for the latter is in the Coding Standards for Cake contributors, viz. developers contributing to the Cake core, not applications built on the framework.
EDIT
Let's say you want to import the Twitter OAuth library, residing in Vendor/twitter
, the main class file is twitteroauth.php
in Vendor/twitter/twitteroauth/twitteroauth.php
:
App::import('Vendor', 'twitteroauth', array('file' => 'twitter'.DS.'twitteroauth'.DS.'twitteroauth.php'));
From what I've gathered:
import()
for external librariesuses()
for framework filesFor example:
App::import('Vendor', 'ExternalLibrary');
App::uses('Inflector', 'Cake.Utility');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With