Enabling filter's default parameters in config files #159

Merged
merged 7 commits into from Mar 5, 2013

Conversation

Projects
None yet
5 participants
Contributor

JJK801 commented Feb 25, 2013

Hi stof,

This update is comming from troubles we had to set a filter parameter at the application start, it enable default values in the config files without breaking older configs.

Jérémy

ManagerConfigurator.php
@@ -60,7 +62,28 @@ private function enableFilters(EntityManager $entityManager)
$filterCollection = $entityManager->getFilters();
foreach ($this->enabledFilters as $filter) {
- $filterCollection->enable($filter);
+ $oFilter = $filterCollection->enable($filter);
@stof

stof Feb 25, 2013

Member

Why oFilter ?

@JJK801

JJK801 Feb 25, 2013

Contributor

$filter is the filter name and $oFilter the filter object, is it a problem?

@stof

stof Feb 25, 2013

Member

we are not using the o*, s* convention to name variable starting with their type. So it is weird to have it used in a single place.

@JJK801

JJK801 Feb 25, 2013

Contributor

ok, $filterObject sounds better?

Resources/config/schema/doctrine-1.0.xsd
+ <xsd:element name="parameters" type="parameters" minOccurs="0" maxOccurs="1" />
+ </xsd:choice>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ <xsd:attribute name="class" type="xsd:string" />
@stof

stof Feb 25, 2013

Member

This is a BC break for XML users

@JJK801

JJK801 Feb 25, 2013

Contributor

I've run some tests and seems good with class as node value as the current config

@stof

stof Feb 25, 2013

Member

yeah, I missed mixed="true"

Tests/DependencyInjection/Fixtures/config/xml/orm_filters.xml
+ <filter name="myFilter" enabled="true" class="Doctrine\Bundle\DoctrineBundle\Tests\DependencyInjection\TestFilter">
+ <parameters>
+ <parameter name="myParameter">myValue</parameter>
+ </parameters>
@stof

stof Feb 25, 2013

Member

It should not look this way in XML but several <parameter> tags

@JJK801

JJK801 Feb 25, 2013

Contributor

ok

Member

stof commented Feb 25, 2013

your XML configuration will not work(try to put at lest 2 parameters) as it is not how prototype nodes should be represented.

ManagerConfigurator.php
+ /**
+ * Enable filters for an given entity manager
+ *
+ * @param EntityManager $entityManager
@stof

stof Feb 25, 2013

Member

This is wrong

@JJK801

JJK801 Feb 25, 2013

Contributor

oh yes, i missed that...

Contributor

JJK801 commented Feb 25, 2013

This will fix previouly said bad things

ManagerConfigurator.php
@@ -60,7 +62,28 @@ private function enableFilters(EntityManager $entityManager)
$filterCollection = $entityManager->getFilters();
foreach ($this->enabledFilters as $filter) {
- $filterCollection->enable($filter);
+ $filterObject = $filterCollection->enable($filter);
+ if( null !== $filterObject ) {
@stof

stof Feb 25, 2013

Member

spaces should be around the braces, not inside them

@JJK801

JJK801 Feb 25, 2013

Contributor

ok, i will fix it

ManagerConfigurator.php
+ * Set defaults parameters for a given filter
+ *
+ * @param string $name Filter name
+ * @param object $filter Filter object
@stof

stof Feb 25, 2013

Member

instead of object, it would be better to use SQLFilter as it is the actual requirement (I would even typehint it)

@JJK801

JJK801 Feb 25, 2013

Contributor

I was not sure SQLFilter is a requirement, so i'm going to implement it

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php
+ foreach ($calls as $call) {
+ if ($call[0] == $methodName) {
+ if ($called > $nbCalls) { break; }
+ else {
@stof

stof Feb 25, 2013

Member

Please follow the Symfony2 CS

@JJK801

JJK801 Feb 25, 2013

Contributor

Ok sorry, my CS may be a little bit outdated :/

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php
+ } else {
+ $this->fail("Method '".$methodName."' is expected to be called ". $nbCalls ." time, definition contain ". $called ." calls.");
+ }
+ }
@stof

stof Feb 25, 2013

Member

I would replace all this with

$this->assertEquals($nbCalls, $call, sprintf('The method "%s" should be called %d times', $methodName, $nbCalls));
@JJK801

JJK801 Feb 25, 2013

Contributor

my first choice was similar but i changed it to get the same model as assertDICDefinitionMethodCallOnce, but you're right, this solution is much better

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php
+ if ($call[0] == $methodName) {
+ if ($called > $nbCalls) { break; }
+ else {
+ if ($params[$called] !== null) {
@stof

stof Feb 25, 2013

Member

what if it is not set ?

@JJK801

JJK801 Feb 25, 2013

Contributor

:/ lets fix it ;)

ManagerConfigurator.php
@@ -15,6 +15,7 @@
namespace Doctrine\Bundle\DoctrineBundle;
use Doctrine\ORM\EntityManager;
+use Doctrine\ORM\Query\Filter\SQLFilter;
@stof

stof Feb 26, 2013

Member

there is an extra space here

ManagerConfigurator.php
+ */
+ private function setFilterParameters($name, SQLFilter $filter)
+ {
+ if( !empty($this->filtersParameters[$name]) ) {
@stof

stof Feb 26, 2013

Member

space spacing issue several times in this method

Tests/DependencyInjection/AbstractDoctrineExtensionTest.php
+ if ($call[0] == $methodName) {
+ if ($called > $nbCalls) {
+ break;
+ } else {
@stof

stof Feb 26, 2013

Member

no need to use else as you are breaking the loop in the if

intel352 commented Mar 3, 2013

+1 -- I need this functionality as well (ability to set parameters for filters within config).

omansour commented Mar 4, 2013

👍 we need this PR at work

stof added a commit that referenced this pull request Mar 5, 2013

Merge pull request #159 from JJK801/filters
Enabling filter's default parameters in config files

@stof stof merged commit d355798 into doctrine:master Mar 5, 2013

1 check passed

default The Travis build passed
Details

@JJK801 JJK801 deleted the JJK801:filters branch Mar 6, 2013

Is there a way to use the service container to inject a value?

Eg, I have a Site Context and I want to use the SiteId from that Entity.

May relate to #134

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment