phpcr-odm
phpcr-odm copied to clipboard
autoname id strategy tuning
The autoname id strategy could use some tweaks:
- [ ] A way to specify an optional nameHint for addNodeAutoNamed
- [ ] The strategy should check if there is a nodename field mapped on the document and if that is non-empty and only generate a name if the field is not set.
- [ ] We could add a way to slugify other fields, for example using the symfony ExpressionLanguage. that would be phpcr-odm only and not use the phpcr way of autocreating a nodename.
@lsmith77 we discussed the nameHint quite a bit a while ago. did we in the end see where in the annotations we could place it? it could be on the id - but if it was on the Document, we would not have to map an id field just to be able to specify the namehint. the autoname strategy is automatically chosen if the document only has a parent mapped.
we did not agree yet .. imho its a bit ugly to add this to the id mapping but i have no suggestion for anything else.
one thing i am not yet sure how we really should do it is that we halfway allow a document to have no id mapped. for the parent+autoname or parent+name strategies it would make sense to not require to map the id to a field. but in the autoname case we do not even want to map the name field. so the only place to put the name hint would be the document really. or should we forbid a document not having the id (=path) mapped?
just to chip in - i think it should be possible to generate the "name" using an extension. i.e. enabling a method to provide a title which is passed through the slugifier service. Or maybe this would be best left to something at the application level.
other doctrines seem to have custom id generators. that would be the most elegant for your use case, i think. what is already possible is using the repository strategy, which delegates this task to the repository of this document class.
having a method on the document class itself is almost unneeded imho - if its the title that needs to be urlized you just as well can adjust the setTitle method to set the nodename if its still empty, or have a prePersist callback (not 100% sure if that happens before validating if we have everything for the id).
in this issue, its about providing a name hint to the phpcr auto name generator, as per the phpcr spec.
dropped the 1.2 milestone here
sure