On 1/26/11 4:02 PM, weaverryan wrote:
I've just created a pull request on the DoctrineMongoDBExtension as a
proof of concept: https://github.com/fabpot/symfony/pull/510

As I said in the comment, I think that using $container-
getParameter() inside a DI extension class should be illegal (from a
best-practice standpoint). Parameters used in this way aren't really
parameters at all, they're options on the DI extension class. Unlike
normal parameters, they can't be configured under the "parameters"
key.

I think that these "options" should be what's modifiable via the DI
extension configuration (e.g. values beneath doctrine_odm.mongodb).
They should be removed from the DI extension resource entirely. This
will create a very clear line between the DI extension "options" and
the normal DIC parameters. This is important because each is
configured in a different way.

Thoughts? Shall I take the pull request further by removing these faux-
parameters (e.g. "doctrine.odm.mongodb.default_connection") and making
them options on the DI extension class? The options would be PHPDoc'ed
on mongodbLoad(), making the DI extension options very easy to
document.

A pull request is always better than a thousand words. Now I understand what you meant in a previous email.

Please, go ahead and modify the MongoDB extension so that we can see all the benefits.

Thanks,
Fabien

Thanks!

On Jan 23, 3:51 am, Benjamin Eberlei<[email protected]>  wrote:
I think it would be annoying if i had to have a DI extension way of
overriding ALL parameters in my extension. The actual instances %.class for
example I always put into parameters only. I think we have to enable
developers here to go deep into the internals of an extension instead of us
having to write tons of code just to move parameters into the DI extension.

What I do find annoying though is when a configuration option can be
defined both through parameters and the DI extension. I found several such
"duplicates" in the Doctrine extension and removed them as good I can.
Other parameters in the Doctrine extension are now "read-only" for other
extensions to consume, i.e. the extension ALWAYS overwrites them with a
default value from the extension, so there is no way for you to set the
value in "parameters" and have it set this way.

greetings,
Benjamin

On Sat, 22 Jan 2011 19:43:16 -0800, Kris Wallsmith







<[email protected]>  wrote:
This is a bug, IMO. The app developer should be able to set a parameter
to
override an extension's default parameters. Likewise, a service defined
in
the app config should override one defined in an extension with the same
id.

Fabien, do you see it differently? Is an extension's config array a
public
API and the parameters used internally part of a private API? If so, the
extension's parameters should never be merged back into the container,
and
the parameter bag never passed to the temporary container here…

https://github.com/fabpot/symfony/blob/master/src/Symfony/Component/D...









I think the solution is to fix this compiler pass so it respects
parameter
and services set by the app dev.

Thanks Ryan!
k

On Jan 22, 2011, at 3:45 PM, ryan weaver<[email protected]>  wrote:

Ok, so my understanding has come full circle. Yes, it sucks that certain
parameters in DI extension resources can't be overridden as normal
parameters (since they're consumed by the DI extension class itself).
But,
as Fabien said, you shouldn't be doing this in the first place, and if
you
are - you're on your own. Plus, I found that removing these "special"
parameters seemed inconsistent. Many of these parameters are consumed by
the
DI extension simply due to the nature of the way the related service is
created. So, splitting information between the DI resource parameters
and a
new "options" array on the DI extension seemed unnatural.

So, this was a learning experience on my part. As Fabien said, the
options
exposed by a DI extension should be configured and "never" the
parameters
located in any resource loaded by the DI extension. The point is, if you
need to override the parameters from a DI extension, you're "on your
own".
The options exposed by the DI extension should be enough (and
well-doc'ed).

Thanks for the help!

Ryan Weaver
Lead Programmer - iostudio - Nashville, TN
http://www.iostudio.com
http://www.thatsquality.com
Twitter: @weaverryan

On Sat, Jan 22, 2011 at 4:14 PM, ryan weaver<[email protected]>
wrote:

Yes, Jordi, you understand me perfectly. I'm seeing this in the MongoDB
bundle, but perhaps the "bad practice" isn't very rampant. I'll put
together
a pull request removing some of these parameters and state my case
there.

Fabien, I suppose the documentation should *just* document the
available
"options" of a DIC and leave the discovery that lower-level things
could
be
overridden (such as service class names) to the advanced developer.
That
gives me good "philosophical" direction as well.

Thanks!

Ryan Weaver
Lead Programmer - iostudio - Nashville, TN
http://www.iostudio.com
http://www.thatsquality.com
Twitter: @weaverryan

On Sat, Jan 22, 2011 at 3:23 PM, Jordi Boggiano
<[email protected]>wrote:

On 22.01.2011 21:50, Fabien Potencier wrote:
Parameters are more low-level and should not be used if there is a
DIC
extension.

Of course, when you define your own services and parameters, the
story
is different. In that case, you don't need to create an extension
(except if you want to distribute your code). So, parameters become
the
way you can tweak your services.

I think he's onto something. If the "config.xml" files define
parameters
that are actually just used by the Extension class and then discarded,
I
think this leads to false expectations that you can define the
parameter
in your config file and override some value.

It's just a best practice thing, but I think it makes sense that a
parameter that is only accessible via the Extension config block
should
not be defined as a parameter in the DIC config. I have no idea how
common this "bad practice" is at the moment though.

Cheers

--
Jordi Boggiano
@seldaek ::http://seld.be/

--
If you want to report a vulnerability issue on symfony, please send it
to
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to

[email protected]<symfony-devs%2Bunsubscribe@google 
groups.com>>>>  For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en

  --
If you want to report a vulnerability issue on symfony, please send it
to
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to

[email protected]<symfony-devs%2Bunsubscribe@google 
groups.com>







For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en


--
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en

Reply via email to