CakePHP Folder Structure
After you’ve downloaded and extracted CakePHP, these are the files
and folders you should see:
You’ll notice three main folders:
- The app folder will be where you work your magic: it’s where
your application’s files will be placed.
- The lib folder is where we’ve worked our magic. Make a
personal commitment not to edit files in this folder. We can’t
help you if you’ve modified the core. Instead, look into modifying
- Finally, the vendors folder is where you’ll place third-party
PHP libraries you need to use with your CakePHP applications.
The App Folder
CakePHP’s app folder is where you will do most of your application
development. Let’s look a little closer at the folders inside
- Holds the (few) configuration files CakePHP uses. Database
connection details, bootstrapping, core configuration files and
more should be stored here.
- Contains the console commands and console tasks for your application.
This directory can also contain a
Templates directory to customize the
output of bake. For more information see Shells, Tasks & Console Tools.
- Contains your application’s controllers and their components.
- Contains libraries that do not come from 3rd parties or
external vendors. This allows you to separate your organization’s
internal libraries from vendor libraries.
- Stores string files for internationalization.
- Contains your application’s models, behaviors, and datasources.
- Contains plugin packages.
- This directory contains all the test cases and test fixtures for your
Test/Case directory should mirror your application and
contain one or more test cases per class in your application. For more
information on test cases and test fixtures, refer to the Testing
This is where CakePHP stores temporary data. The actual data it
stores depends on how you have CakePHP configured, but this folder
is usually used to store model descriptions, logs, and sometimes
Make sure that this folder exists and is writable,
or the performance of your application will be severely
impacted. In debug mode, CakePHP will warn you if the folder is
absent or not writable.
- Any third-party classes or libraries should be placed here. Doing
so makes them easy to access using the App::import(‘vendor’,
‘name’) function. Keen observers will note that this seems
redundant, as there is also a vendors folder at the top level of
our directory structure. We’ll get into the differences between the
two when we discuss managing multiple applications and more complex
- Presentational files are placed here: elements, error pages,
helpers, layouts, and view files.
- In a production setup, this folder should serve as the document
root for your application. Folders here also serve as holding