class FieldByClassEnhancer in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony-cmf/routing/Enhancer/FieldByClassEnhancer.php \Symfony\Cmf\Component\Routing\Enhancer\FieldByClassEnhancer
This enhancer sets a field if not yet existing from the class of an object in another field.
The comparison is done with instanceof to support proxy classes and such.
Only works with RouteObjectInterface routes that can return a referenced content.
@author David Buchmann
Hierarchy
- class \Symfony\Cmf\Component\Routing\Enhancer\FieldByClassEnhancer implements RouteEnhancerInterface
Expanded class hierarchy of FieldByClassEnhancer
1 file declares its use of FieldByClassEnhancer
- FieldByClassEnhancerTest.php in vendor/
symfony-cmf/ routing/ Tests/ Enhancer/ FieldByClassEnhancerTest.php
File
- vendor/
symfony-cmf/ routing/ Enhancer/ FieldByClassEnhancer.php, line 27
Namespace
Symfony\Cmf\Component\Routing\EnhancerView source
class FieldByClassEnhancer implements RouteEnhancerInterface {
/**
* @var string field for the source class
*/
protected $source;
/**
* @var string field to write hashmap lookup result into
*/
protected $target;
/**
* @var array containing the mapping between a class name and the target value
*/
protected $map;
/**
* @param string $source the field name of the class
* @param string $target the field name to set from the map
* @param array $map the map of class names to field values
*/
public function __construct($source, $target, $map) {
$this->source = $source;
$this->target = $target;
$this->map = $map;
}
/**
* If the source field is instance of one of the entries in the map,
* target is set to the value of that map entry.
*
* {@inheritDoc}
*/
public function enhance(array $defaults, Request $request) {
if (isset($defaults[$this->target])) {
// no need to do anything
return $defaults;
}
if (!isset($defaults[$this->source])) {
return $defaults;
}
// we need to loop over the array and do instanceof in case the content
// class extends the specified class
// i.e. phpcr-odm generates proxy class for the content.
foreach ($this->map as $class => $value) {
if ($defaults[$this->source] instanceof $class) {
// found a matching entry in the map
$defaults[$this->target] = $value;
return $defaults;
}
}
return $defaults;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FieldByClassEnhancer:: |
protected | property | ||
FieldByClassEnhancer:: |
protected | property | ||
FieldByClassEnhancer:: |
protected | property | ||
FieldByClassEnhancer:: |
public | function |
If the source field is instance of one of the entries in the map,
target is set to the value of that map entry. Overrides RouteEnhancerInterface:: |
|
FieldByClassEnhancer:: |
public | function |