From 6dbafe3efbe4393078215c22da641d5d1003b8d1 Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:12:18 -0500 Subject: [PATCH 01/11] Correct typo in link --- pages/06.sprinkles/01.sprinkles/docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/06.sprinkles/01.sprinkles/docs.md b/pages/06.sprinkles/01.sprinkles/docs.md index 1722d8b6..583b86d0 100644 --- a/pages/06.sprinkles/01.sprinkles/docs.md +++ b/pages/06.sprinkles/01.sprinkles/docs.md @@ -35,4 +35,4 @@ Sprinkles are loaded in a specific order, defined by their dependencies, and ent A basic UserFrosting installation comes with fours sprinkles. A description of them can be found [in a previous chapter](/structure/sprinkles#bundled-sprinkles). -Now that we're familiar with the basic concept, let's dig into the [contents of a Sprinkle](/sprinkles/contents)! +Now that we're familiar with the basic concept, let's dig into the [contents of a Sprinkle](/sprinkles/content)! From 6426b3c4a44320b7a2345611de910798fe0286b2 Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:17:46 -0500 Subject: [PATCH 02/11] Basic proofreading --- pages/06.sprinkles/01.sprinkles/docs.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/06.sprinkles/01.sprinkles/docs.md b/pages/06.sprinkles/01.sprinkles/docs.md index 583b86d0..dcb8b2fa 100644 --- a/pages/06.sprinkles/01.sprinkles/docs.md +++ b/pages/06.sprinkles/01.sprinkles/docs.md @@ -25,14 +25,14 @@ Each Sprinkle can contain any or all of the following entities: - templates (Twig files) - "extra" content that does not fit into any of these categories -As seen in the [App Structure Chapter](/structure), sprinkles can be located anywhere. The only requirement is it's **recipe** need to be accessible by PSR-4 compatible namespace. +As seen in the [App Structure Chapter](/structure), sprinkles can be located anywhere. The only requirement is its **recipe** needs to be accessible through a PSR-4 compatible namespace. ### The Main Sprinkle -Sprinkles are loaded in a specific order, defined by their dependencies, and entities of each type in one sprinkle can extend entities of the same type in other sprinkles. The topmost sprinkle, usually your own project, is called the **main sprinkle**. Every other sprinkles are called **depends sprinkles**. +Sprinkles are loaded in a specific order, defined by their dependencies, and entities of a given type in one sprinkle can extend entities of the same type in other sprinkles. The topmost sprinkle, usually your own project, is called the **main sprinkle**. All other sprinkles are called **depends sprinkles**. ### Default Sprinkles -A basic UserFrosting installation comes with fours sprinkles. A description of them can be found [in a previous chapter](/structure/sprinkles#bundled-sprinkles). +A basic UserFrosting installation comes with four sprinkles. A description of them can be found [in a previous chapter](/structure/sprinkles#bundled-sprinkles). Now that we're familiar with the basic concept, let's dig into the [contents of a Sprinkle](/sprinkles/content)! From bc423f5fd427191a195fdb8b7b3690082e061a3f Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:25:50 -0500 Subject: [PATCH 03/11] Updated links --- pages/06.sprinkles/02.content/docs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pages/06.sprinkles/02.content/docs.md b/pages/06.sprinkles/02.content/docs.md index 89363614..4bbbb327 100644 --- a/pages/06.sprinkles/02.content/docs.md +++ b/pages/06.sprinkles/02.content/docs.md @@ -35,7 +35,7 @@ Within each sprinkle, you will find any or all of the following directories and └── webpack.config.js ``` -[notice=note]The file structure, is *somewhat* flexible. For example, `app/` can actually be named whatever you want. All content of `app/src/` can also be customized. However, the other directory inside `app/` (or whatever you call it) should be named the same, to allow your sprinkle to overwrite other sprinkles resources.[/notice] +[notice=note]The file structure is *somewhat* flexible. For example, `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.[/notice] 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. @@ -69,7 +69,7 @@ The `cache` directory is used by the [Cache system](/advanced/caching) to store ### /app/config -`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 6](/configuration/config-files) for more information. +`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](/configuration/config-files) for more information. ### /app/locale @@ -77,7 +77,7 @@ The `locale` directory contains [translation files](/i18n) for your Sprinkle. Li 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 16](/i18n) for more information on UserFrosting's internationalization and localization system. +See [Chapter 17](/i18n) for more information on UserFrosting's internationalization and localization system. ### /app/logs @@ -99,7 +99,7 @@ The `storage` directory is used to store files managed by Filesystem service. Th ### /app/templates -To separate content and logic, UserFrosting uses the popular [Twig](http://twig.sensiolabs.org/) templating engine. Since Twig has its own system for [loading templates](http://twig.sensiolabs.org/doc/api.html#built-in-loaders), UserFrosting builds upon this to allow overriding templates in Sprinkles. See [Templating with Twig](/templating-with-twig) for more information on how Twig is integrated into UserFrosting. +To separate content and logic, UserFrosting uses the popular [Twig](http://twig.symfony.com/) templating engine. Since Twig has its own system for [loading templates](http://twig.symfony.com/doc/api.html#built-in-loaders), UserFrosting builds upon this to allow overriding templates in Sprinkles. See [Templating with Twig](/templating-with-twig) for more information on how Twig is integrated into UserFrosting. ### /app/test From 5fbb680ccccf61e213e62177100bd6094121d91b Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:36:22 -0500 Subject: [PATCH 04/11] Proofreading, some edits, lowercase "sprinkle" --- pages/06.sprinkles/02.content/docs.md | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pages/06.sprinkles/02.content/docs.md b/pages/06.sprinkles/02.content/docs.md index 4bbbb327..ad1c1db8 100644 --- a/pages/06.sprinkles/02.content/docs.md +++ b/pages/06.sprinkles/02.content/docs.md @@ -37,11 +37,11 @@ Within each sprinkle, you will find any or all of the following directories and [notice=note]The file structure is *somewhat* flexible. For example, `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.[/notice] -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. +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. ### /composer.json -The `composer.json` file is primarily used in UserFrosting to map PHP classes, but 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 `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. @@ -57,49 +57,49 @@ $ php bakery webpack ### /webpack.config.js -The `webpack.config.js` file is used for defining **asset entries**, that can be referenced by templates. The advantage of using asset entries (as compared to referencing the 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 11](/asset-management/asset-bundles) for more information about asset bundles. +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](/asset-management/asset-bundles) for more information about asset bundles. ### /app/assets -The `assets` directory contains all of the Javascript, CSS, images, and other static content for your site. See [Chapter 11](/asset-management) for more information about asset management and usage. +The `assets` directory contains all of the Javascript, CSS, images, and other static content for your site. See [Chapter 13](/asset-management) for more information about asset management and usage. ### /app/cache -The `cache` directory is used by the [Cache system](/advanced/caching) to store the cached files. This directory is only required when the sprinkle is used a main Sprinkle. +The `cache` directory is used by the [Cache system](/advanced/caching) to store the cached files. This directory is only required for main sprinkles. ### /app/config -`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](/configuration/config-files) for more information. +`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](/configuration/config-files) for more information. ### /app/locale -The `locale` directory contains [translation files](/i18n) for your Sprinkle. Like configuration files, translation files simply return an associative array. +The `locale` directory contains [translation files](/i18n) 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. +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](/i18n) for more information on UserFrosting's internationalization and localization system. ### /app/logs -The `logs` directory is used to store the UserFrosting debug logs. This directory is only required when the sprinkle is used a main Sprinkle. +The `logs` directory is used to store UserFrosting debug logs. This directory is only required for main sprinkles. ### /app/schema -The `schema` directory contains the [request schema](/routes-and-controllers/client-input/validation) for your Sprinkle. Schema files in other Sprinkles can be extended by using a custom loader. +The `schema` directory contains the [request schema](/routes-and-controllers/client-input/validation) for your sprinkle. Schema files in other sprinkles can be extended by using a custom loader. ### /app/src -The `src` directory contains the (preferably) [PSR-4](http://www.php-fig.org/psr/psr-4/) compatible PHP code for your Sprinkle. This directory will contain your controllers, database models, [migrations](/database/migrations), [routes](/routes-and-controllers), [service providers](/services), [data sprunjers](/database/data-sprunjing), and any other custom classes that your Sprinkle uses. This is where your Sprinkle Recipe will be found. +The `src` directory contains the (preferably) [PSR-4](http://www.php-fig.org/psr/psr-4/) compatible PHP code for your sprinkle. This directory will contain your controllers, database models, [migrations](/database/migrations), [routes](/routes-and-controllers), [service providers](/services), [data sprunjers](/database/data-sprunjing), and any other custom classes that your sprinkle uses. This is where your sprinkle's Recipe will be found. [notice=note]The content of `app/src/` can be customized and doesn't need to follow any strict convention.[/notice] ### /app/storage -The `storage` directory is used to store files managed by Filesystem service. This directory is only required when the sprinkle is used a main Sprinkle. +The `storage` directory is used to store files managed by Filesystem service. This directory is only required for main sprinkles. ### /app/templates -To separate content and logic, UserFrosting uses the popular [Twig](http://twig.symfony.com/) templating engine. Since Twig has its own system for [loading templates](http://twig.symfony.com/doc/api.html#built-in-loaders), UserFrosting builds upon this to allow overriding templates in Sprinkles. See [Templating with Twig](/templating-with-twig) for more information on how Twig is integrated into UserFrosting. +To separate content and logic, UserFrosting uses the popular [Twig](http://twig.symfony.com/) templating engine. Since Twig has its own system for [loading templates](http://twig.symfony.com/doc/api.html#built-in-loaders), UserFrosting builds upon this to allow overriding templates in sprinkles. See [Templating with Twig](/templating-with-twig) for more information on how Twig is integrated into UserFrosting. ### /app/test @@ -107,13 +107,13 @@ The `test` directory is similar to `/src`, but for your [Tests](/testing). ### /app/.env -The `.env` file is used to store your local [environnement variables](/configuration/environment-vars). This file is only required when the sprinkle is used a main Sprinkle. +The `.env` file is used to store your local [environment variables](/configuration/environment-vars). This file is only required for main sprinkles. ### /public -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 when the sprinkle is used a main Sprinkle. +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. -[notice=warning]The public directory *can* technically be renamed to something else. However, some features requires this path to be hardcoded. For example, the asset compiler and locator have this reference hardcoded. To customized the public directory name, further customization would be required in the code and other configuration values.[/notice] +[notice=warning]The public directory *can* technically be renamed to something else. However, some features requires this path to be hardcoded. For example, the asset compiler and locator have this reference hardcoded. To customize the public directory name, further customization will be required in the code and other configuration values.[/notice] ### /vendor From e60dc4aaa8054a6bdfb53e0db0433b3f0e631318 Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:37:41 -0500 Subject: [PATCH 05/11] lowercase "sprinkle" --- pages/06.sprinkles/01.sprinkles/docs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pages/06.sprinkles/01.sprinkles/docs.md b/pages/06.sprinkles/01.sprinkles/docs.md index dcb8b2fa..e9e467b4 100644 --- a/pages/06.sprinkles/01.sprinkles/docs.md +++ b/pages/06.sprinkles/01.sprinkles/docs.md @@ -8,13 +8,13 @@ taxonomy: In previous versions of UserFrosting, you had to directly modify the files that come with the default installation in order to add your own functionality. For example, if you wanted to add a field to the user registration page, you had to actually modify `register.twig`. Or, if you wanted to add a new relation on the `User` class, you had to modify the actual `User.php` class that comes with UserFrosting. -Starting in version 4, this is no longer the case! **UserFrosting 4** introduced the **[Sprinkle system](/structure/sprinkles)** as a way to completely isolate the code and content that you and your team produce from the core UserFrosting installation, as well as third-party code. **UserFrosting 5** took this a step further, by allowing Composer to manage Sprinkles and decoupling even more functionality from the base install. +Starting in version 4, this is no longer the case! **UserFrosting 4** introduced the **[Sprinkle system](/structure/sprinkles)** as a way to completely isolate the code and content that you and your team produce from the core UserFrosting installation, as well as third-party code. **UserFrosting 5** took this a step further, by allowing Composer to manage sprinkles and decoupling even more functionality from the base install. ## What is a "Sprinkle"? -A Sprinkle is a functionally cohesive unit of code and content that fits neatly into its own package. A Sprinkle could implement a core component, a third-party plugin, a theme, or even an entire website! As a reminder, any project created from the [App Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template) is still a Sprinkle! +A sprinkle is a functionally cohesive unit of code and content that fits neatly into its own package. A sprinkle could implement a core component, a third-party plugin, a theme, or even an entire website! As a reminder, any project created from the [App Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template) is still a sprinkle! -Each Sprinkle can contain any or all of the following entities: +Each sprinkle can contain any or all of the following entities: - assets (JS, CSS, images, etc) - configuration files @@ -35,4 +35,4 @@ Sprinkles are loaded in a specific order, defined by their dependencies, and ent A basic UserFrosting installation comes with four sprinkles. A description of them can be found [in a previous chapter](/structure/sprinkles#bundled-sprinkles). -Now that we're familiar with the basic concept, let's dig into the [contents of a Sprinkle](/sprinkles/content)! +Now that we're familiar with the basic concept, let's dig into the [contents of a sprinkle](/sprinkles/content)! From b863c63ce47c63e7568b5dce27fb5caf62aa16aa Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Fri, 5 Jan 2024 01:43:15 -0500 Subject: [PATCH 06/11] Updated liniks --- pages/06.sprinkles/03.recipe/docs.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pages/06.sprinkles/03.recipe/docs.md b/pages/06.sprinkles/03.recipe/docs.md index 0cbff7d6..e5e6b4f2 100644 --- a/pages/06.sprinkles/03.recipe/docs.md +++ b/pages/06.sprinkles/03.recipe/docs.md @@ -15,11 +15,11 @@ Each Sprinkle **must have** a recipe. It's not possible for a sprinkle to exist The Sprinkle recipe is a simple PHP class that provides standard methods which will be called by services to retrieve information about your Sprinkle structure and the class it's registering. Every sprinkle recipes **MUST** implement the `UserFrosting\Sprinkle\SprinkleRecipe` interface. If you started from the [Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template), you already have a basic recipe. This interface requires you to implement the following method in your recipe: -- [`getName`](#getname): Returns the name of the Sprinkle. -- [`getPath`](#getpath): Returns the path of the Sprinkle. -- [`getSprinkles`](#getsprinkles): Returns an array of dependent sub-sprinkles recipe. -- [`getRoutes`](#getroutes): Return an array of routes classes. -- [`getServices`](#getservices): Return an array of services classes. +- [`getName`](#name): Returns the name of the Sprinkle. +- [`getPath`](#path): Returns the path of the Sprinkle. +- [`getSprinkles`](#dependent-sprinkles): Returns an array of dependent sub-sprinkles recipe. +- [`getRoutes`](#routes): Return an array of routes classes. +- [`getServices`](#services): Return an array of services classes. [notice=note]Since the class must implement the `SprinkleRecipe` interface, all of those methods are mandatory. Failure to implement the interface will result in an exception being thrown. However, it doesn't mean a method must return data. It's perfectly fine for some method to return an empty string or empty array.[/notice] @@ -250,7 +250,7 @@ Methods to implements : Interface : `UserFrosting\Sprinkle\Core\Sprinkle\Recipe\SeedRecipe` Methods to implements : -- `getSeeds` : Return a list of [Seeds](database/seeding) classes +- `getSeeds` : Return a list of [Seeds](/database/seeding) classes **Example:** ```php @@ -268,7 +268,7 @@ Methods to implements : Interface : `UserFrosting\Sprinkle\MiddlewareRecipe` Methods to implements : -- `getMiddlewares` : Return a list of [Middlewares](advanced/middlewares) classes +- `getMiddlewares` : Return a list of [Middlewares](/advanced/middlewares) classes **Example:** ```php @@ -285,7 +285,7 @@ Methods to implements : Interface : `UserFrosting\Event\EventListenerRecipe` Methods to implements : -- `getEventListeners` : Allows to register [Event Listeners](/advanced/events) +- `getEventListeners` : Allows to register [Event Listeners](/advanced/events#listener) **Example:** ```php From e047b813084a5a793374f71b52eed378af2fca4b Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Sun, 7 Jan 2024 05:39:04 -0500 Subject: [PATCH 07/11] Proofreading --- pages/06.sprinkles/03.recipe/docs.md | 74 ++++++++++++++-------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/pages/06.sprinkles/03.recipe/docs.md b/pages/06.sprinkles/03.recipe/docs.md index e5e6b4f2..6ab1f340 100644 --- a/pages/06.sprinkles/03.recipe/docs.md +++ b/pages/06.sprinkles/03.recipe/docs.md @@ -6,26 +6,26 @@ taxonomy: category: docs --- -The Sprinkle Recipe dictate how your Sprinkle is built, like a blueprint. UserFrosting services and framework will use the information from the recipe to initiate some services, and expose classes your sprinkle provides for other service to use. +The Sprinkle Recipe dictates how your sprinkle is built, like a blueprint. UserFrosting services and framework will use the information from the recipe to initiate some services, and expose classes your sprinkle provides for other servicea to use. -Each Sprinkle **must have** a recipe. It's not possible for a sprinkle to exist without a recipe, as it won't be possible to expose it's class and service to the framework. It's possible however to customize other Sprinkle, as we'll see later on this page. +Each sprinkle **must have** a recipe. It's not possible for a sprinkle to exist without a recipe, as it won't be possible to expose its class and service to the framework. It's possible however to customize other sprinkles, as we'll see later on this page. ## The Sprinkle Recipe -The Sprinkle recipe is a simple PHP class that provides standard methods which will be called by services to retrieve information about your Sprinkle structure and the class it's registering. Every sprinkle recipes **MUST** implement the `UserFrosting\Sprinkle\SprinkleRecipe` interface. If you started from the [Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template), you already have a basic recipe. +The Sprinkle Recipe is a simple PHP class that provides standard methods which will be called by services to retrieve information about your sprinkle structure and the class it's registering. Every sprinkle recipe **MUST** implement the `UserFrosting\Sprinkle\SprinkleRecipe` interface. If you started from the [Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template), you already have a basic recipe. This interface requires you to implement the following method in your recipe: -- [`getName`](#name): Returns the name of the Sprinkle. -- [`getPath`](#path): Returns the path of the Sprinkle. +- [`getName`](#name): Returns the name of the sprinkle. +- [`getPath`](#path): Returns the path of the sprinkle. - [`getSprinkles`](#dependent-sprinkles): Returns an array of dependent sub-sprinkles recipe. - [`getRoutes`](#routes): Return an array of routes classes. - [`getServices`](#services): Return an array of services classes. -[notice=note]Since the class must implement the `SprinkleRecipe` interface, all of those methods are mandatory. Failure to implement the interface will result in an exception being thrown. However, it doesn't mean a method must return data. It's perfectly fine for some method to return an empty string or empty array.[/notice] +[notice=note]Since the class must implement the `SprinkleRecipe` interface, all of those methods are mandatory. Failure to implement the interface will result in an exception being thrown. However, it doesn't mean a method must return data. It's perfectly fine for a method to return an empty string or empty array.[/notice] ### Name -This method returns the name identifier of the Sprinkle. This name is mostly used in debug interfaces to identify resources and class registered by the sprinkle. +This method returns the name identifier of the sprinkle. This name is mostly used in debug interfaces to identify resources and classes registered by the sprinkle. The method should return a string. For example: @@ -38,7 +38,7 @@ public function getName(): string ### Path -This method returns the path of the Sprinkle. This path should point where the `src/`, `assets/`, etc. folder are located, typically `app/`. For example, if your recipe is in `app/src/YourSprinkle.php` and your Sprinkle structure looks like this... +This method returns the path of the sprinkle. This path should point where the `src/`, `assets/`, etc. folder is located, typically `app/`. For example, if your recipe is in `app/src/YourSprinkle.php` and your sprinkle structure looks like this... ``` ├── app/ @@ -69,11 +69,11 @@ public function getPath(): string ### Dependent sprinkles -This methods returns the sub-sprinkles your sprinkle depends on. This makes it easier to integrate other sprinkles classes and resources into your app without having to copy everything inside your own recipe. +This methods returns the sub-sprinkles your sprinkle depends on. This makes it easier to integrate other sprinkles' classes and resources into your app without having to copy everything inside your own recipe. -The order the Sprinkles are loaded is important. Files in one Sprinkle may override files with the same name and path in previously loaded Sprinkles. For example, if we created `site/templates/pages/about.html.twig`, this would override `core/templates/pages/about.html.twig` because we load the `site` Sprinkle *after* the `core` Sprinkle. +The order the sprinkles are loaded is important. Files in one sprinkle may override files with the same name and path in previously loaded sprinkles. For example, if we created `site/templates/pages/about.html.twig`, this would override `core/templates/pages/about.html.twig` because we load the `site` sprinkle *after* the `core` sprinkle. -The Sprinkles will be loaded in the order you list them (top one first), but also based on their respective dependencies. For example: +Sprinkles will be loaded in the order you list them (top one first), but also based on their respective dependencies. For example: ```php public function getSprinkles(): array { @@ -86,7 +86,7 @@ public function getSprinkles(): array } ``` -Since `Admin` depends on `Core`, `Account` and `AdminLTE`, it's not mandatory to relist them in your recipe. In fact, the code above is equivalent to this, since the other one will be registered by `Admin` already : +Since `Admin` depends on `Core`, `Account` and `AdminLTE`, it's not mandatory to relist them in your recipe. In fact, the code above is equivalent to this, since the other one will be registered by `Admin`: ```php public function getSprinkles(): array { @@ -96,7 +96,7 @@ public function getSprinkles(): array } ``` -This also mean removing `AdminLTE` as a dependency for example **cannot be done by simply removing it from your recipe**! It's impossible to remove `AdminLTE` without removing `Admin`, since `Admin` cannot work without it's dependency. +This also mean removing `AdminLTE` as a dependency for example **cannot be done by simply removing it from your recipe**! It's impossible to remove `AdminLTE` without removing `Admin`, since `Admin` cannot work without its dependency. However, it also means the next example **is also equivalent**: ```php @@ -114,12 +114,12 @@ public function getSprinkles(): array Let's look at the process for the above code : 1. AdminLTE will be loaded first. AdminLTE depends on Core first, and Account second. Core doesn't depend on anything. So **Core** is the first sprinkle loaded; -2. Account is then observed. It depends on Core, which is already loaded, so **Account** is the second loaded sprinkle; +2. Account is then checked. It depends on Core, which is already loaded, so **Account** is the second loaded sprinkle; 3. AdminLTE doesn't have any more dependencies, so **AdminLTE** is loaded in third; -4. Admin is now observed. It depends on Core, Account and AdminLTE. All are already loaded, so everything is good. **Admin** is loaded fourth; -5. Your sprinkle's dependencies are all good, so your Sprinkle is loaded last; +4. Admin is now checked. It depends on Core, Account and AdminLTE. All are already loaded, so everything is good. **Admin** is loaded fourth; +5. This sprinkle's dependencies are all good, so it is loaded last. -Because of every sprinkle dependencies, in all three examples the order will be `Core -> Account -> AdminLTE -> Admin -> YOUR APP`. +Because of sprinkle dependencies, in all three examples the order will be `Core -> Account -> AdminLTE -> Admin -> YOUR APP`. [notice=tip]An easy way to see the final order sprinkles are loaded is via the command line `php bakery sprinkle:list` command. The registered sprinkles will be displayed in the order they are registered.[/notice] @@ -156,7 +156,7 @@ public function getServices(): array Since your sprinkle is the last loaded sprinkle, it becomes ***the main sprinkle***. This is important, as the **main sprinkle** is the entry point to the app. The main sprinkle class must be referenced in two *entry files* : `/public/index.php` (web app/page entry) and `/bakery` (CLI App). -For example, if your Main Sprinkle class fully qualified name is `UserFrosting\App\MyApp` : +For example, if your main sprinkle class fully qualified name is `UserFrosting\App\MyApp` : **/public/index.php** ```php @@ -180,11 +180,11 @@ $bakery = new Bakery(MyApp::class); // <-- Reference here $bakery->run(); ``` -[notice]The main sprinkle class can be names whatever you want. You can rename the default one from App Skeleton, but it's important to remember to also update it's reference in both location.[/notice] +[notice]The main sprinkle class can be named whatever you want. You can rename the default one from App Skeleton, but it's important to remember to also update its reference in both locations.[/notice] ## Optional recipes -The sprinkle recipe power comes from it's modularity. To avoid having one huge recipe with empty content, optional features can be added only when necessary. +The sprinkle recipe power comes from its modularity. To avoid having one huge recipe with empty content, optional features can be added only when necessary. The available sub-recipes includes: @@ -197,7 +197,7 @@ The available sub-recipes includes: | [EventListenerRecipe](#eventlistenerrecipe) | Registering [Event Listeners](/advanced/events) | | [TwigExtensionRecipe](#twigextensionrecipe) | Registering [Twig Extension](/templating-with-twig/filters-and-functions#extending-twig-extensions) | -Your recipe simply need to implement the corresponding interface. Classes may implement more than one interface if desired by separating each interface with a comma. For example : +Your recipe simply needs to implement the corresponding interface. Classes may implement more than one interface if desired by separating each interface with a comma. For example : ```php class MyApp implements @@ -210,7 +210,7 @@ class MyApp implements { ``` -[notice=tip]Your sprinkle could even define it's own recipe that you or other sprinkles could implements![/notice] +[notice=tip]Your sprinkle could even define its own recipe that you or other sprinkles could implement![/notice] ### BakeryRecipe Interface : `UserFrosting\Sprinkle\BakeryRecipe` @@ -232,7 +232,7 @@ Methods to implements : ### MigrationRecipe Interface : `UserFrosting\Sprinkle\Core\Sprinkle\Recipe\MigrationRecipe` -Methods to implements : +Methods to implement : - `getMigrations` : Return a list of [Migrations](/database/migrations) classes **Example:** @@ -249,7 +249,7 @@ Methods to implements : ### SeedRecipe Interface : `UserFrosting\Sprinkle\Core\Sprinkle\Recipe\SeedRecipe` -Methods to implements : +Methods to implement : - `getSeeds` : Return a list of [Seeds](/database/seeding) classes **Example:** @@ -267,7 +267,7 @@ Methods to implements : ### MiddlewareRecipe Interface : `UserFrosting\Sprinkle\MiddlewareRecipe` -Methods to implements : +Methods to implement : - `getMiddlewares` : Return a list of [Middlewares](/advanced/middlewares) classes **Example:** @@ -284,7 +284,7 @@ Methods to implements : ### EventListenerRecipe Interface : `UserFrosting\Event\EventListenerRecipe` -Methods to implements : +Methods to implement : - `getEventListeners` : Allows to register [Event Listeners](/advanced/events#listener) **Example:** @@ -311,7 +311,7 @@ Methods to implements : ### TwigExtensionRecipe Interface : `UserFrosting\Sprinkle\Core\Sprinkle\Recipe\TwigExtensionRecipe` -Methods to implements : +Methods to implement : - `getTwigExtensions` : Return a list of [Twig Extension](/templating-with-twig/filters-and-functions#extending-twig-extensions) classes **Example:** @@ -325,13 +325,13 @@ Methods to implements : } ``` -## Removing default Sprinkles +## Removing default sprinkles -A default install, from the Skeleton, enables every [default Sprinkles](/structure/sprinkles#bundled-sprinkles). But it's not said your app requires every features provided by theses default sprinkles. For example, you might not need the Admin Sprinkle if you don't need any of the user management feature. +A default install, from the Skeleton, enables every [default sprinkle](/structure/sprinkles#bundled-sprinkles). But your app may not require every feature provided by these default sprinkles. For example, you might not need the Admin sprinkle if you don't need any user management features. In this case, two files need to be edited : `composer.json` and the Sprinkle Recipe. -1. In **/composer.json**, remove the sprinkle from the Composer required : +1. In **/composer.json**, remove the sprinkle from the Composer requirements : ```json "userfrosting/sprinkle-admin": "^5.0", ``` @@ -353,19 +353,19 @@ In this case, two files need to be edited : `composer.json` and the Sprinkle Rec [notice=note]Technically, the **Core** sprinkle IS optional. However, remember it provides pretty much every base feature of UserFrosting, including database support. Without any sprinkles, i.e. only the UserFrosting Framework, your app would be a very basic Slim Application with routes support.[/notice] -## Customizing a dependent Sprinkle +## Customizing a dependent sprinkle -Sometime you may want to customize one of the dependent sprinkle. For example, you may want to remove all routes defined in the Account sprinkle. Or use only one migrations from the `AwesomeStuff` Sprinkle. There's two easy way to customize the dependent sprinkles, either by cherry picking resources or extending the dependent sprinkle recipe. +Sometimes you may want to customize one of the dependent sprinkles. For example, you may want to remove all routes defined in the Account sprinkle. Or use only one migrations from the `AwesomeStuff` sprinkle. There's two easy way to customize dependent sprinkles, either by cherry-picking resources or extending the dependent sprinkle's recipe. -### Cherry picking resources +### Cherry-picking resources -This method is best when you want a small number of resources from a dependent sprinkle. For example, when you want one migrations from the `AwesomeStuff` Sprinkle. The drawback is if the dependent sprinkle is updated, you might not have the most up to date code. If you want to import many resources (but not all of them) from a dependent sprinkle, it's best to use the other method. +This method is best when you want a small number of resources from a dependent sprinkle. For example, when you want one migration from the `AwesomeStuff` sprinkle. The drawback is if the dependent sprinkle is updated, you may need to manually update your code. If you want to import many resources (but not all of them) from a dependent sprinkle, it's best to use the other method. -In this case, instead of adding the dependent sprinkle as a simple (in `getSprinkles`), you simply open the dependent sprinkle recipe and copy the code you want into your recipe. +In this case, instead of adding the dependent sprinkle (in `getSprinkles`), you open the dependent sprinkle recipe and copy the code you want into your recipe. ### Extending dependent recipe -This method is best used when you want to *remove* a small number of resource from a dependent sprinkle. The drawback is if the dependent sprinkle is updated, you might not have the most up to date code. If you want to only one resource from a dependent sprinkle, it's best to use the previous method to import one, than to remove everything. +This method is best used when you want to *remove* a small number of resources from a dependent sprinkle. As with the previous method, if the dependent sprinkle is updated, you may need to manually update your code. If you want to only one resource from a dependent sprinkle, it's best to use the previous method to import one, than to remove everything else. For example, you may want to remove all routes defined in the Account sprinkle : ```php @@ -391,4 +391,4 @@ class CustomAccount extends Account In this case, instead of depending on `Account` in `getSprinkles`, you'll add `CustomAccount` in your sprinkle `getSprinkles`. All other methods from `Account` will be included via `CustomAccount`. -You'll then have **two recipes** in your sprinkle, e.g.: `MyApp` and `CustomAccount`, side by side. `MyApp` will still be *main sprinkle*, referenced in `index.php` and `bakery`, since `CustomAccount` is still a dependency of `MyApp`. +You'll then have **two recipes** in your sprinkle, e.g.: `MyApp` and `CustomAccount`, side by side. `MyApp` will still be *main sprinkle*, referenced in `index.php` and `bakery`, since `CustomAccount` is a dependency of `MyApp`. From 643061dc1e8edf363ce6b47a2c65e1c0cb3d7dfa Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Sun, 7 Jan 2024 05:41:53 -0500 Subject: [PATCH 08/11] Updated links --- pages/06.sprinkles/04.customize/docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/06.sprinkles/04.customize/docs.md b/pages/06.sprinkles/04.customize/docs.md index d828e5ad..f0efa5c4 100644 --- a/pages/06.sprinkles/04.customize/docs.md +++ b/pages/06.sprinkles/04.customize/docs.md @@ -6,7 +6,7 @@ taxonomy: category: docs --- -This guide assumes that you've already completed the [installation guide](/installation) and successfully managed to get UserFrosting working in your [local development environment](/background/develop-locally-serve-globally) using the [Skeleton](structure/introduction#the-app-skeleton-your-project-s-template). If not, please do that now - feel free to [ask for help](/troubleshooting/getting-help) if you're running into trouble! +This guide assumes that you've already completed the [installation guide](/installation) and successfully managed to get UserFrosting working in your [local development environment](/background/develop-locally-serve-globally) using the [Skeleton](/structure/introduction#the-app-skeleton-your-project-s-template). If not, please do that now - feel free to [ask for help](/troubleshooting/getting-help) if you're running into trouble! ## Custom Namespace and Name From 6cc80b122db415a6c49d0549ce12f8f7c4f8f16a Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Mon, 8 Jan 2024 00:22:08 -0500 Subject: [PATCH 09/11] `Sprinkle`->`sprinkle` --- pages/06.sprinkles/04.customize/docs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/06.sprinkles/04.customize/docs.md b/pages/06.sprinkles/04.customize/docs.md index f0efa5c4..a31fd2c9 100644 --- a/pages/06.sprinkles/04.customize/docs.md +++ b/pages/06.sprinkles/04.customize/docs.md @@ -1,7 +1,7 @@ --- title: Customizing Your Sprinkle metadata: - description: This guide walks you though the process of setting up your application by implementing a new Sprinkle. + description: This guide walks you though the process of setting up your application by implementing a new sprinkle. taxonomy: category: docs --- @@ -10,7 +10,7 @@ This guide assumes that you've already completed the [installation guide](/insta ## Custom Namespace and Name -The Skeleton application used as a base installation for every new installation since UserFrosting 5 is a great way to start your UserFrosting project. It comes with some default values which you can change to make your App yours, starting with the PHP Namespace, info in the `composer.json` and the Sprinkle name in the Sprinkle Recipe. +The Skeleton application used as a base installation for every new installation since UserFrosting 5 is a great way to start your UserFrosting project. It comes with some default values which you can change to make your App yours, starting with the PHP Namespace, info in the `composer.json` and the sprinkle name in the Sprinkle Recipe. ### composer.json @@ -18,7 +18,7 @@ The most important part to edit here is the Namespace. The namespace tells Compo [notice]Compared to previous version of UserFrosting, **starting from UserFrosting 5**, the namespace isn't strict anymore. There's no more convention to follow.[/notice] -The namespace is defined in the `composer.json` file in the base directory of our Sprinkle. The default file looks like this : +The namespace is defined in the `composer.json` file in the base directory of our sprinkle. The default file looks like this : Original **composer.json** ```json @@ -134,7 +134,7 @@ Modified **composer.json** } ``` -The important part here is the `autoload.psr-4` key. This tells Composer to map the root `src/` directory of your Sprinkle to the root **namespace** `Owlfancy\Site\`. +The important part here is the `autoload.psr-4` key. This tells Composer to map the root `src/` directory of your sprinkle to the root **namespace** `Owlfancy\Site\`. [notice]If you're not familiar with PSR-4, it is a standard that says we should map a base directory to a base namespace, and then the relative namespaces of classes in that directory should correspond to the relative paths of their class files. For example, the directory `/app/src/Controller/OwlController.php` would be mapped to the fully qualified class name `\Owlfancy\Site\Controller\OwlController`.[/notice] @@ -144,7 +144,7 @@ The next step is to run Composer from your project directory, so that it can det $ composer update ``` -[notice=note]If after running these steps, UserFrosting fails to find new classes that you add to `src/`, make sure that that the user running Composer had read permissions for your Sprinkle. You can check that the path to your Sprinkle's `src/` directory was actually added in `app/vendor/composer/autoload_psr4.php` You can also try running Composer with the `-vvv` flag for more detailed reporting.[/notice] +[notice=note]If after running these steps, UserFrosting fails to find new classes that you add to `src/`, make sure that that the user running Composer had read permissions for your sprinkle. You can check that the path to your sprinkle's `src/` directory was actually added in `app/vendor/composer/autoload_psr4.php` You can also try running Composer with the `-vvv` flag for more detailed reporting.[/notice] ### The recipe @@ -270,6 +270,6 @@ This customizes some basic properties for our application - set your site title, ![Overriding site settings in config file](/images/site-title.png) -This is because the template for this page is dynamically pulling that particular piece of text from your new configuration file. Note that your value for `site.title` overrides the value of `site.title` in the core Sprinkle's configuration file. +This is because the template for this page is dynamically pulling that particular piece of text from your new configuration file. Note that your value for `site.title` overrides the value of `site.title` in the core sprinkle's configuration file. -[notice=tip]You can [override configuration values](/configuration/config-files) from any previously loaded Sprinkles, including the default Sprinkles that ship with UserFrosting. Check the Core Sprinkle and the Account Sprinkle `/app/config/default.php` for a complete list.[/notice] +[notice=tip]You can [override configuration values](/configuration/config-files) from any previously loaded sprinkles, including the default sprinkles that ship with UserFrosting. Check the Core sprinkle and the Account sprinkle `/app/config/default.php` for a complete list.[/notice] From a155d40a16613c8c7bac816455f530a184a02c0c Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Thu, 11 Jan 2024 04:27:03 -0500 Subject: [PATCH 10/11] Proofreading --- pages/06.sprinkles/04.customize/docs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/06.sprinkles/04.customize/docs.md b/pages/06.sprinkles/04.customize/docs.md index a31fd2c9..565fc6f2 100644 --- a/pages/06.sprinkles/04.customize/docs.md +++ b/pages/06.sprinkles/04.customize/docs.md @@ -10,15 +10,15 @@ This guide assumes that you've already completed the [installation guide](/insta ## Custom Namespace and Name -The Skeleton application used as a base installation for every new installation since UserFrosting 5 is a great way to start your UserFrosting project. It comes with some default values which you can change to make your App yours, starting with the PHP Namespace, info in the `composer.json` and the sprinkle name in the Sprinkle Recipe. +The Skeleton application, used as a base installation for every new installation since UserFrosting 5, is a great way to start your UserFrosting project. It comes with some default values which you can change to make your App yours, starting with the PHP Namespace, info in the `composer.json`, and the sprinkle name in the Sprinkle Recipe. ### composer.json -The most important part to edit here is the Namespace. The namespace tells Composer where to look for source code in a PHP application. By default, the base namespace in the Skeleton is `UserFrosting\App`. You can change this to whatever you want. The usual scheme is `{Vendor}\{Project}`, where *Vendor* is your brand and *Project* your project name, but there's no *law* you have to follow here. +The most important part to edit here is the Namespace. The namespace tells Composer where to look for source code in a PHP application. By default, the base namespace in the Skeleton is `UserFrosting\App`, but you can change this to whatever you want. The usual scheme is `{Vendor}\{Project}`, where *Vendor* is your brand and *Project* your project name, but there's no *law* you have to follow here. [notice]Compared to previous version of UserFrosting, **starting from UserFrosting 5**, the namespace isn't strict anymore. There's no more convention to follow.[/notice] -The namespace is defined in the `composer.json` file in the base directory of our sprinkle. The default file looks like this : +The namespace is defined in the `composer.json` file in the base directory of your sprinkle. The default file looks like this : Original **composer.json** ```json @@ -83,7 +83,7 @@ Original **composer.json** } ``` -Let's changes thing up. All the metadata can be customized to reflect your project, and we'll define the new namespace to `Owlfancy\Site` : +Let's change thing up. All the metadata can be customized to reflect your project, and we'll define the new namespace to `Owlfancy\Site` : Modified **composer.json** ```json @@ -178,7 +178,7 @@ class Owlfancy implements ### The entry files -There's still one last thing to edit. Since we change the recipe from `UserFrosting\App\MyApp` to `Owlfancy\Site\Owlfancy` in the entry files, which are `public/index.php` and `bakery`: +There's still one last thing to edit. Since we changed the recipe from `UserFrosting\App\MyApp` to `Owlfancy\Site\Owlfancy`, we also need to update that in the entry files, which are `public/index.php` and `bakery`: **/public/index.php** ```php @@ -266,10 +266,10 @@ In `default.php`, add the following: ]; ``` -This customizes some basic properties for our application - set your site title, author, author's URL, and timezone. Reload the page, and you should see the new site title appear in the upper left corner: +This customizes some basic properties for our application - you can set your site title, author, author's URL, and timezone. Reload the page, and you should see the new site title appear in the upper left corner: ![Overriding site settings in config file](/images/site-title.png) -This is because the template for this page is dynamically pulling that particular piece of text from your new configuration file. Note that your value for `site.title` overrides the value of `site.title` in the core sprinkle's configuration file. +The template for this page dynamically pulls that particular piece of text from your new configuration file. Note that your value for `site.title` overrides the value of `site.title` in the core sprinkle's configuration file. [notice=tip]You can [override configuration values](/configuration/config-files) from any previously loaded sprinkles, including the default sprinkles that ship with UserFrosting. Check the Core sprinkle and the Account sprinkle `/app/config/default.php` for a complete list.[/notice] From 758f3d4472b534c626a8d55ef0ede587aa6fe0bf Mon Sep 17 00:00:00 2001 From: StrykeSlammerII Date: Thu, 11 Jan 2024 04:56:07 -0500 Subject: [PATCH 11/11] Update docs.md --- pages/06.sprinkles/05.community/docs.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/06.sprinkles/05.community/docs.md b/pages/06.sprinkles/05.community/docs.md index becaadac..04bf4f59 100644 --- a/pages/06.sprinkles/05.community/docs.md +++ b/pages/06.sprinkles/05.community/docs.md @@ -1,23 +1,23 @@ --- title: Community Sprinkles metadata: - description: Sprinkles shared between projects are called Community Sprinkles. + description: Sprinkles shared between projects are called community sprinkles. taxonomy: category: docs --- One great thing about the **Sprinkle system** is its ability to wrap complete functionality inside a single package. This makes it a great tool to write your website isolated from the core UserFrosting code. It also means it's super easy to share sprinkles between projects... and with other members of the UserFrosting community! That's what we call a **community sprinkle**. -## Finding Sprinkles +## Finding sprinkles The best place to look for community sprinkles is on [GitHub](https://github.com). We recommend tagging your community sprinkles with the `userfrosting-sprinkle` topic. This will make it easier for people to find your **community sprinkle** [using GitHub search bar](https://github.com/search?q=topic%3Auserfrosting-sprinkle&type=Repositories). -## Distributing your Sprinkle +## Distributing your sprinkle -If you want to distribute your sprinkle, there's no real requirements that need to be met. You should at least make sure your sprinkle contains a valid `composer.json` file. This file is required to add any sort of class and PSR-4 definition to your sprinkle, so you already have one. Make sure it contains up-to-date information, like your name and license details, it's always welcome. Oh, and make sure the `type` key is defined as `userfrosting-sprinkle` in your sprinkles `composer.json` file, but it's not required since UserFrosting 5. +If you want to distribute your sprinkle, there are no real requirements that need to be met. You should at least make sure your sprinkle contains a valid `composer.json` file. This file is required to add any sort of class and PSR-4 definition to your sprinkle, so you already have one. Make sure it contains up-to-date information; your name and license details are always welcome. If you include a `type` key, be sure it's defined as `userfrosting-sprinkle` in your sprinkles `composer.json` file--but this is not required as of UserFrosting 5. -You should also make sure your Sprinkle is up to date with the latest version of UserFrosting. Providing documentation and examples in a `README` file will encourage dev to use your sprinkle. If your sprinkle is interacting with the database, make sure you bundle a working [migration](/database/migrations) with your sprinkle. That's pretty much it! +You should also make sure your sprinkle is up to date with the latest version of UserFrosting. Providing documentation and examples in a `README` file will encourage devs to use your sprinkle. If your sprinkle is interacting with the database, make sure you bundle a working [migration](/database/migrations) with your sprinkle. That's pretty much it! -When sharing a community sprinkle, we highly recommend publishing it on GitHub and adding it to [Packagist](https://packagist.org). This means your Sprinkle will now be able to be included in others `composer.json`, similar to how the default sprinkles are already defined. +When sharing a community sprinkle, we highly recommend publishing it on GitHub and adding it to [Packagist](https://packagist.org). This means your sprinkle will now be able to be included in others' `composer.json`, similar to how the default sprinkles are already defined. -When someone install your Sprinkle as a dependency, the last step is to add *your* recipe to *their* Recipe, in the `getSprinkles()` method. +When someone installs your sprinkle as a dependency, the last step is to add *your* recipe to *their* Recipe, in the `getSprinkles()` method.