Skip to content

Add note about the property attribute (Property Accessor) #3124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions reference/forms/types/entity.rst
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,23 @@ This is the property that should be used for displaying the entities
as text in the HTML element. If left blank, the entity object will be
cast into a string and so must have a ``__toString()`` method.

Note: ``property`` is the property path used to display the option. So you
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not using a note-directive here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, make it look like this:

.. note::

The ``property`` option is the property path...

And then everything will start indented by 4 spaces

can use anything supported by the :doc:`PropertyAccessor component</components/property_access/introduction>`

Usage sample:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use 2 colons here (::) - this triggers that the following is a PHP code block. If you put everything in a note, then the code block would then be 8 spaces indented.


$builder->add('gender', 'entity', array(
'class' => 'MyBundle:Gender',
'property' => 'translations[en].name',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('g')
->join('g.translations', 't')
->where('t.locale = :locale')
->orderBy('t.name', 'ASC')
->setParameter('locale', 'en');
},
));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like adding this note, but can you explain how this code will work? The translations[en].name path implies that Gender.translations is an associative array, where translations are organized by their locale. But typically, a OneToMany relationship would mean that Gender.translations is just a flat, indexed array of all the Translation elements related to this Gender. So, am I missing a piece? :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sample is based on the usage of the https://github.com/KnpLabs/DoctrineBehaviors#translatable

So here, Gender.translations is not a flat array but a Doctrine Array Collection of GenderTranslation with the locale as key of the collection.

I would like just show that it's possible to use a path which is supported by the Property Access component here. Maybe I can add a link to the KnpLabs DoctrineBehaviors to give more information on the context?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@weaverryan I think that we must document that property is a property path.

For more information about the context of the example, see https://github.com/KnpLabs/DoctrineBehaviors/blob/master/src/Knp/DoctrineBehaviors/Model/Translatable/TranslatableMethods.php

I can provide a more simple example if needed.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, I completely agree - I think adding the note about the property path will be awesome. So yes, can you simplify the example? Then I think this is great! Thanks!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact I don't find a more simple example which show the capabilities of the property option. I think that displaying list with a translated names is the more suitable and understandable usage.


group_by
~~~~~~~~

Expand Down