Download the PHP package tzunghaor/settings-bundle without Composer
On this page you can find all versions of the php package tzunghaor/settings-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package settings-bundle
Tzunghaor Settings Bundle =========================
- Define your settings as php classes.
- Settings are stored in database in a single table.
- Bundle provides GUI to edit settings, customisable in setting definition classes.
- Define your scopes: each scope has its own settings, setting inheritance is supported.
- You can define multiple collections with different settings/scopes/config.
You can take a look in the Tests/TestApp for working examples.
Installation
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Applications that use Symfony Flex
Open a command console, enter your project directory and execute:
Applications that don't use Symfony Flex
Step 1: Download the Bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
Step 2: Enable the Bundle
Then, enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
Additional recommended packages
- phpdocumentor/reflection-docblock - with this installed, you have more possibilities to define your settings
- symfony/asset - the setting editor twig template uses asset() - if you don't have it installed, then you have to override __editor_page.html.twig__: see twig customization
- symfony/validator - with this you can define validation rules on your setting classes that will be used in the setting editor. See symfony validation.
- symfony/security-core - using this you can create security voters to manage who can edit which settings. See security voters
Setup
In the framework.yaml
in your Symfony config - set
http_method_override
to true, otherwise the setting form submit won't work.
Database Setup
You need a database table to store your settings - the easiest way is to use the entity definition provided by this bundle. If you have auto mapping enabled in doctrine, then you can skip this configuration step.
Create Table
To actually create the table, use preferably doctrine migrations:
or the fast and dangerous way on your developer machine:
More about the database table
Defining Setting Classes
You can define your settings in php classes (I will call such classes as setting sections, or simply sections), for example create a directory for your settings (e.g. src/Settings), and create a BoxSettings.php in it:
Since at the beginning no settings are stored in the database, it is best to set sensible default values in your class.
More about setting classes
Then tell the bundle where your settings classes are in the config:
Now you can get your settings from the service provided by the bundle.
More on collections and services
Setting up the editor
If you have symfony/asset installed then you can skip to setting up the route. Otherwise you first have to overwrite a twig template: create a new directory in your application templates/bundles/TzunghaorSettingsBundle, copy Resources/views/editor_page.html.twig to there, remove the "ts_stylesheets" and "ts_javascripts" blocks, and use your method to load the .js and .css of the bundle.
Add the route defined by the bundle to your routes:
Then go to https://your.domain/settings/edit/
in your browser.
You probably want to set up some firewall rules in your security config for this controller, and/or use security voters.
You can have more control on the editor with route definition, see routing.
Setting up cache
It is strongly advised to use a cache with this bundle, e.g.:
Currently you need to clear the cache every time you do changes in your setting section classes.
Advanced Usage
Using scopes
If you need different values for the same setting in different scenarios, then you can use scopes:
Use only alphanumeric characters and underscores as scope names.
You can build arbitrary deep hierarchies (child nodes can have children, etc.), but if you use nested scopes (meaning you have at least one "children" node) you will need a tag aware cache, see Symfony\Contracts\Cache\TagAwareCacheInterface.
The SettingsService::getSection() will use default_scope when called without subject. Otherwise you need to pass it the scope name as subject.
It can be useful to have your webserver set an environment variable based on the request, and use that in your config:
For more advanced use (e.g. having one scope per user), you can define your own scope provider
All versions of settings-bundle with dependencies
ext-json Version *
doctrine/doctrine-bundle Version ^2.4.3
doctrine/orm Version >=2.9.0
symfony/cache Version ^5.4 || ^6.0 || ^7.0
symfony/config Version ^5.4 || ^6.0 || ^7.0
symfony/dependency-injection Version ^5.4 || ^6.0 || ^7.0
symfony/form Version ^5.4 || ^6.0 || ^7.0
symfony/http-kernel Version ^5.4 || ^6.0 || ^7.0
symfony/property-access Version ^5.4 || ^6.0 || ^7.0
symfony/property-info Version ^5.4 || ^6.0 || ^7.0
symfony/routing Version ^5.4 || ^6.0 || ^7.0
symfony/twig-bundle Version ^5.4 || ^6.0 || ^7.0