Within each sprinkle, you will find any or all of the following directories and files:
├── app/
├── assets/
├── cache/
├── config/
├── locale/
├── logs/
├── schema/
├── src/
├── Bakery/
├── Controllers/
├── Database/
├── [...]
├── Routes/
├── Sprunje/
└── YourSprinkle.php
├── storage/
├── templates/
├── tests/
└── .env
├── public/
├── vendor/
├── composer.json
├── package.json
└── webpack.config.js
app/
can be named whatever you want. All contents of app/src/
can also be customized. However, other directories inside app/
(or whatever you call it) should use the above naming system to allow your sprinkle to overwrite other sprinkles' resources.Each of these directories corresponds to specific types of entities that make up your application. UserFrosting has different rules for how each type of entity can extend the entities of the same type loaded in previous sprinkles. A brief description of each one is listed below.
The composer.json
file is primarily used in UserFrosting to map PHP classes. As this is Composer, it can also be used to reference additional PHP libraries. The type
key in your sprinkle's composer.json
file should always be defined as a userfrosting-sprinkle
. This will make your sprinkles manageable by Composer itself later.
The sprinkle composer.json
should also define the sprinkles this one depends on.
The package.json
file is used for retrieving frontend dependencies via npm, like Bootstrap. Dependencies specified in package.json
will be downloaded to /node_modules
.
To download frontend dependencies, from the project root directory:
$ php bakery webpack
The webpack.config.js
file is used for defining asset entries which can be referenced by templates. The advantage of using asset entries (as compared to referencing specific files) is that multiple files can be quickly referenced by the name of their entries. In production the individual files in each bundle are merged by Webpack Encore, reducing the number of HTTP requests that need to be made and thus reducing client latency and server load. See Chapter 13 for more information about asset bundles.
The assets
directory contains all of the Javascript, CSS, images, and other static content for your site. See Chapter 13 for more information about asset management and usage.
The cache
directory is used by the Cache system to store the cached files. This directory is only required for main sprinkles.
config
contains the configuration parameters for your sprinkle. You can define configuration files for different environments (development, testing, production, etc). For each environment, the configuration files in each sprinkle will be merged together at runtime. See Chapter 9 for more information.
The locale
directory contains translation files for your sprinkle. Like configuration files, translation files simply return an associative array.
Just as with configuration files, UserFrosting will recursively merge translation files for the currently selected language(s) from each loaded sprinkle. This means that each subsequently loaded sprinkle can override translations from previous sprinkles, or define new ones entirely.
See Chapter 17 for more information on UserFrosting's internationalization and localization system.
The logs
directory is used to store UserFrosting debug logs. This directory is only required for main sprinkles.
The schema
directory contains the request schema for your sprinkle. Schema files in other sprinkles can be extended by using a custom loader.
The src
directory contains the (preferably) PSR-4 compatible PHP code for your sprinkle. This directory will contain your controllers, database models, migrations, routes, service providers, data sprunjers, and any other custom classes that your sprinkle uses. This is where your sprinkle's Recipe will be found.
app/src/
can be customized and doesn't need to follow any strict convention.The storage
directory is used to store files managed by Filesystem service. This directory is only required for main sprinkles.
To separate content and logic, UserFrosting uses the popular Twig templating engine. Since Twig has its own system for loading templates, UserFrosting builds upon this to allow overriding templates in sprinkles. See Templating with Twig for more information on how Twig is integrated into UserFrosting.
The test
directory is similar to /src
, but for your Tests.
The .env
file is used to store your local environment variables. This file is only required for main sprinkles.
The public
directory is the web server's document / web root. The index.php
in this directory serves as the front controller for all HTTP requests. This directory is only required for main sprinkles.
The vendor
directory is where all Composer dependency will be loaded.