kassko / data-mapper-bundle
Integrates data-mapper in Symfony projects.
Requires
- php: >=8.1
- kassko/data-mapper: ^2.58-rc@rc
- psr/container: ^1.1|^2.0
- psr/log: ^1.0|^2.0|^3.0
- psr/simple-cache: ^1.1|^2.0|^3.0
- symfony/config: ^5.4|^6.0|^7.0
- symfony/dependency-injection: ^5.4|^6.0|^7.0
- symfony/framework-bundle: ^5.4|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5|^10.0|^11.0
- symfony/console: ^5.4|^6.0|^7.0
- symfony/finder: ^5.4|^6.0|^7.0
- symfony/http-kernel: ^5.4|^6.0|^7.0
- symfony/twig-bundle: ^5.4|^6.0|^7.0
- symfony/web-profiler-bundle: ^5.4|^6.0|^7.0
- symfony/yaml: ^5.4|^6.0|^7.0
Suggests
- symfony/twig-bundle: Required for the data lineage profiler template
- symfony/web-profiler-bundle: Required for data lineage profiling in the debug toolbar
This package is auto-updated.
Last update: 2026-05-29 01:07:35 UTC
README
This bundle integrates the data-mapper component into Symfony applications. Which is a mapper that provides a lot of features to represent some raw data as objects.
To know more about this component and how to use it, please read the data-mapper documentation reference.
Installation on Symfony 2
Note that:
- The second version number is used when compatibility is broken
- The third for new feature
- The fourth for hotfix
- The first for new API or to go from pre-release to release (from 0 to 1)
Using a version in 0.14 is recommended.
Versions in 0.15 are no longer maintained.
You can install the library with composer and here is a good requirement:
composer require kassko/data-mapper-bundle:"~0.14.4"
Register the bundle in app/AppKernel.php:
public function registerBundles() { $bundles = array( new Kassko\Bundle\DataMapperBundle\KasskoDataMapperBundle(), new Kassko\Bundle\ClassResolverBundle\KasskoClassResolverBundle(), ); }
- DataMapper service
- Configuration reference
- Expression language integration
- Object listener
- Custom loader
DataMapper service
Get the service from your controller:
$this->get('kassko_data_mapper');
It represents a Kassko\DataMapper\DataMapper instance. To know more about this component and how to use it, please read the data-mapper documentation reference.
Configuration reference
kassko_data_mapper: mapping: default_resource_type: annotations # Default is "annotations" or other type (1). default_resource_dir: # Optional. default_provider_method: # Optional. bundles: #optional section some_bundle: resource_type: annotations # Default is "annotations" or other type (1). resource_dir: # The resource dir of the given bundle. provider_method: ~ # Required. Default value is null. objects: # Optional section. some_object: resource_type: # Optional. resource_path: # Optional. The resource directory with the resource name. If not defined, data-mapper fallback to resource_name and prepend to it resource_dir (or default_resource_dir). So if resource_path is not defined, case resource_name and resource_dir (or default_resource_dir) must be defined. resource_name: # Optional. Only the resource name (so without the directory). provider_method: # Optional. Override default_provider_method. object_class: # Required (full qualified object class name). cache: metadata_cache: # Optional section class: # Optional. id: # Optional. life_time: # Default is 0 is_shared: # Default is false adapter_class: # Default is "Kassko\Bundle\DataMapperBundle\Adapter\Cache\DoctrineCacheAdapter" result_cache: # Optional section and same as metadata_cache logger_service: # Optional. A logger service name. Il will be used for logging in data-mapper component.
(1) availables types are annotations, yaml, php, php_file, yaml_file. And maybe others, feel free to add custom mapping loaders.
Expression language integration
Expression language services
Add a provider
<service id="my_provider" class="Kassko\Sample\SomeExpressionFunctionProvider"> <tag name="kassko_data_mapper.expression_function_provider" variable_key="container" variable_value="service_container"/> </service>
With the code above, the container is available in your provider. You can use it:
use Kassko\DataMapper\Expression\ExpressionFunction; use Kassko\DataMapper\Expression\ExpressionFunctionProviderInterface; class ExpressionFunctionProvider implements ExpressionFunctionProviderInterface { public function getFunctions() { return [ new ExpressionFunction( 'granted', function ($arg) { return sprintf('container.get(%s)', $arg); }, function (array $context, $value) { return $context['container']->get($value); } ), ]; } }
Object listener
The data-mapper needs to be able to retrieve an object listener from its full qualified class name. In order to do that, you have to register your object listener as a service and tag it with kassko_data_mapper.listener.
To know more about object listener, please read the data-mapper documentation reference.
Custom loader
DataMapper provide three formats for mapping: annotations, yaml and php. But you can use a custom mapping loader.
For more details about how to implement your custom loader, please read the data-mapper documentation reference.
Use a service in a persistent object without injecting it
You need to add it in the registry. You can do that by this way.
Tag your service:
<service id="logger"> <tag name="kassko_data_mapper.registry_item" key="logger"> </service>
And then you can get your service from your persistent object:
trait LoggableTrait { private function getLogger() { return Registry::getInstance()['logger']; } }
class Person { use LoggableTrait; private $id; private $name; private $address; public function getName() { if (! isset($this->address)) { $this->getLogger()->warning(sprintf('No address for %s', $this->name)); } } }