Skip to content

Commit 3ca8690

Browse files
committed
WIP: use configurable mapper instead of CmfRoute document to set locale of route documents
1 parent 59aa2c5 commit 3ca8690

File tree

9 files changed

+128
-34
lines changed

9 files changed

+128
-34
lines changed

Controller/RestController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ public function postDocumentAction(Request $request)
115115
$this->performSecurityChecks();
116116

117117
$rdfType = trim($request->request->get('@type'), '<>');
118-
$type = $this->typeFactory->getTypeByRdf($rdfType);
119118

119+
$type = $this->typeFactory->getTypeByRdf($rdfType);
120120
$result = $this->restHandler->run($request->request->all(), $type, null, RestService::HTTP_POST);
121121

122122
if (!is_null($result)) {

DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public function getConfigTreeBuilder()
2727
->useAttributeAsKey('name')
2828
->prototype('scalar')->end()
2929
->end()
30+
->arrayNode('rdfmapper')
31+
->useAttributeAsKey('name')
32+
->prototype('scalar')->end()
33+
->end()
3034
->scalarNode('role')->defaultValue('IS_AUTHENTICATED_ANONYMOUSLY')->end()
3135
->arrayNode('image')
3236
->canBeUnset()

DependencyInjection/SymfonyCmfCreateExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public function load(array $configs, ContainerBuilder $container)
4141

4242
$container->setParameter($this->getAlias().'.map', $config['map']);
4343

44+
$container->setParameter($this->getAlias().'.rdfmapper', $config['rdfmapper']);
45+
4446
$container->setParameter($this->getAlias().'.stanbol_url', $config['stanbol_url']);
4547

4648
$container->setParameter($this->getAlias().'.role', $config['role']);

Document/CmfRoute.php

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Symfony\Cmf\Bundle\CreateBundle\Mapper;
4+
5+
use Midgard\CreatePHP\Mapper\DoctrinePhpcrOdmMapper;
6+
7+
use Midgard\CreatePHP\Entity\PropertyInterface;
8+
9+
use Symfony\Cmf\Bundle\RoutingExtraBundle\Document\Route;
10+
11+
/**
12+
* Mapper to handle route documents stored in PHPCR-ODM.
13+
*/
14+
class RouteDoctrinePhpcrOdmMapper extends DoctrinePhpcrOdmMapper
15+
{
16+
public function setPropertyValue($object, PropertyInterface $property, $value)
17+
{
18+
if ($object instanceof Route && $property->getIdentifier() === 'locale') {
19+
$object->setDefault('_locale', $value);
20+
$object->setRequirement('_locale', $value);
21+
return $object;
22+
}
23+
return parent::setPropertyValue($object, $property, $value);
24+
}
25+
26+
public function getPropertyValue($object, PropertyInterface $property)
27+
{
28+
if ($object instanceof Route && $property->getIdentifier() === 'locale') {
29+
return $object->getDefault('_locale');
30+
}
31+
return parent::getPropertyValue($object, $property);
32+
}
33+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace Symfony\Cmf\Bundle\CreateBundle\Metadata;
4+
5+
use Midgard\CreatePHP\RdfMapperInterface;
6+
use Midgard\CreatePHP\Type\TypeInterface;
7+
8+
use Midgard\CreatePHP\Metadata\RdfTypeFactory;
9+
10+
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
11+
use Symfony\Component\DependencyInjection\ContainerInterface;
12+
use Midgard\CreatePHP\Metadata\RdfDriverInterface;
13+
14+
/**
15+
* TODO: comment ...
16+
* Use container to get instances of mappers instead of class names
17+
*/
18+
class ContainerRdfTypeFactory extends RdfTypeFactory implements ContainerAwareInterface
19+
{
20+
/**
21+
* @var array service names of the mappers
22+
*/
23+
private $mapperServices;
24+
25+
/**
26+
* @var ContainerInterface
27+
*
28+
* @api
29+
*/
30+
protected $container;
31+
32+
/**
33+
* @param RdfMapperInterface $defaultMapper the default mapper to use if there is no specific one
34+
* @param RdfDriverInterface $driver the driver to load types from
35+
* @param array $mappers rdf mappers per service name
36+
*/
37+
public function __construct(RdfMapperInterface $defaultMapper, RdfDriverInterface $driver, $mapperServices = array())
38+
{
39+
$this->mapperServices = $mapperServices;
40+
parent::__construct($defaultMapper, $driver);
41+
}
42+
43+
/**
44+
* TODO: update the comment
45+
* Get the mapper for type $name, or the defaultMapper if there is no specific mapper.
46+
*
47+
* @param string $name the type name for which to get the mapper
48+
*
49+
* @return RdfMapperInterface
50+
*/
51+
protected function getMapper($name)
52+
{
53+
if (isset($this->mapperServices[$name])) {
54+
return $this->container->get($this->mapperServices[$name]);
55+
}
56+
57+
return parent::getMapper($name);
58+
}
59+
60+
/**
61+
* @api
62+
*/
63+
public function setContainer(ContainerInterface $container = null)
64+
{
65+
$this->container = $container;
66+
}
67+
}

Resources/config/phpcr_odm.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
<parameters>
88
<parameter key="symfony_cmf_create.phpcr_odm_mapper_class">Midgard\CreatePHP\Mapper\DoctrinePhpcrOdmMapper</parameter>
9+
<parameter key="symfony_cmf_create.route_doctrine_phpcr_odm_mapper_class">Symfony\Cmf\Bundle\CreateBundle\Mapper\RouteDoctrinePhpcrOdmMapper</parameter>
910
</parameters>
1011

1112
<services>
@@ -16,5 +17,11 @@
1617
<argument>null</argument>
1718
</service>
1819

20+
<service id="symfony_cmf_create.route_doctrine_phpcr_odm_mapper" class="%symfony_cmf_create.route_doctrine_phpcr_odm_mapper_class%" public="true">
21+
<argument>%symfony_cmf_create.map%</argument>
22+
<argument type="service" id="doctrine_phpcr"/>
23+
<argument>null</argument>
24+
</service>
25+
1926
</services>
2027
</container>

Resources/config/services.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<parameter key="symfony_cmf_create.jsloader.controller.class">Symfony\Cmf\Bundle\CreateBundle\Controller\JsloaderController</parameter>
99
<parameter key="symfony_cmf_create.rest.controller.class">Symfony\Cmf\Bundle\CreateBundle\Controller\RestController</parameter>
1010
<parameter key="symfony_cmf_create.rdf_type_factory_class">Midgard\CreatePHP\Metadata\RdfTypeFactory</parameter>
11+
<parameter key="symfony_cmf_create.container_rdf_type_factory_class">Symfony\Cmf\Bundle\CreateBundle\Metadata\ContainerRdfTypeFactory</parameter>
1112
<parameter key="symfony_cmf_create.rest.handler_class">Midgard\CreatePHP\RestService</parameter>
1213
</parameters>
1314

@@ -28,26 +29,37 @@
2829
<service id="symfony_cmf_create.rest.controller" class="%symfony_cmf_create.rest.controller.class%">
2930
<argument type="service" id="fos_rest.view_handler"/>
3031
<argument type="service" id="symfony_cmf_create.object_mapper"/>
31-
<argument type="service" id="symfony_cmf_create.rdf_type_factory"/>
32+
<argument type="service" id="symfony_cmf_create.container_rdf_type_factory"/>
3233
<argument type="service" id="symfony_cmf_create.rest.handler"/>
3334
<argument>%symfony_cmf_create.role%</argument>
3435
<argument type="service" id="security.context" on-invalid="ignore"/>
3536
</service>
3637

3738
<service id="symfony_cmf_create.twig_extension" class="Midgard\CreatePHP\Extension\Twig\CreatephpExtension">
38-
<argument type="service" id="symfony_cmf_create.rdf_type_factory"/>
39+
<argument type="service" id="symfony_cmf_create.container_rdf_type_factory"/>
3940
<tag name="twig.extension"/>
4041
</service>
4142

4243
<service id="symfony_cmf_create.rdf_driver" class="Midgard\CreatePHP\Metadata\RdfDriverXml">
4344
<argument>%symfony_cmf_create.rdf_config_dirs%</argument>
4445
</service>
4546

47+
<!--
4648
<service id="symfony_cmf_create.rdf_type_factory" class="%symfony_cmf_create.rdf_type_factory_class%" public="true">
4749
<argument type="service" id="symfony_cmf_create.object_mapper"/>
4850
<argument type="service" id="symfony_cmf_create.rdf_driver"/>
4951
<argument>%symfony_cmf_create.map%</argument>
5052
</service>
53+
-->
54+
55+
<service id="symfony_cmf_create.container_rdf_type_factory" class="%symfony_cmf_create.container_rdf_type_factory_class%" public="true">
56+
<argument type="service" id="symfony_cmf_create.object_mapper"/>
57+
<argument type="service" id="symfony_cmf_create.rdf_driver"/>
58+
<argument>%symfony_cmf_create.rdfmapper%</argument>
59+
<call method="setContainer">
60+
<argument type="service" id="service_container" />
61+
</call>
62+
</service>
5163

5264
<service id="symfony_cmf_create.rest.handler" class="%symfony_cmf_create.rest.handler_class%" public="true">
5365
<argument type="service" id="symfony_cmf_create.object_mapper"/>

Resources/rdf-mappings/Cmf.CreateBundle.Document.CmfRoute.xml renamed to Resources/rdf-mappings/Cmf.RoutingExtraBundle.Document.Route.xml

File renamed without changes.

0 commit comments

Comments
 (0)