Skip to content

Manage embedded fields for API Platform Filter#984

Merged
dunglas merged 1 commit into
api-platform:masterfrom
jsamouh:nested-embed-field-filter
May 23, 2017
Merged

Manage embedded fields for API Platform Filter#984
dunglas merged 1 commit into
api-platform:masterfrom
jsamouh:nested-embed-field-filter

Conversation

@jsamouh

@jsamouh jsamouh commented Mar 13, 2017

Copy link
Copy Markdown
Contributor
Q A
Bug fix? yes
New feature? no
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets #969
License MIT
Doc PR N/A

This PR is to aliment a discussion about how to manage embedded fields in API Platform Filter
This PR works form Boolean Filter Only. It works recursively Entity->Embed Fields -> Embed Fields..
No Tests is developped for the moment

@jsamouh jsamouh changed the title Manage embedded fields for BooleanFilter Manage embedded fields for API Platform Filter Mar 13, 2017
protected function isPropertyMapped(string $property, string $resourceClass, bool $allowAssociation = false): bool
{
if ($this->isPropertyNested($property)) {
if ($this->isPropertyNested($property) && !$this->isPropertyNestedEmbedded($property, $resourceClass)) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is this condition valid everytime? I mean, will it break current implementations if we put this inside isPropertyNested so that other filters also benefits from this? Maybe it's just the boolean filter that's impacted, but I doubt that.

@jsamouh jsamouh Mar 13, 2017

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes it will breaks 👍
If we put the code in isPropertyNested, it disturbs for differents reasons:

  • 1/ it means that a embed field is not considered as a nested field. In fact it is by definition :-)
  • 2/ the function extractProperties in AbstractFilter use isPropertyNested and for an Embed field, it has to be needsFixing to true. Otherwise, it fails for the request.

This code is in AbstractFilter, so any Filter will benefit the code.
Normally the only thing to change for each filter is isBooleanField, isDateField, isNumericField...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Okay got it. I'd add a method that ends up doing $this->isPropertyNested($property) && !$this->isPropertyNestedEmbedded($property, $resourceClass) though. Feel free to add tests.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I do not agree that an Embedded field should be considered a "nested property". isNestedProperty is to help us find out when we need to join.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Agreed ofc. Smth like isPropertyNestedFilterable

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@teohhanhui , you're right for that. So We confirm that a nested property concerns only join ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@teohhanhui @soyuka , what about extractProperties method in the class AbstracFilter ? The property $needsFixing to true. Otherwise the embed field embed_b.field is transformed to embed_b_field and generates an error in the request

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, that's the approach that I'd take.

Embedded fields are inlined to the field mapping, apparently (see https://github.com/doctrine/doctrine2/blob/v2.5.6/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php#L3230-L3264), so there should be no further changes necessary.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, we also need to fix extractProperties. $needsFixing = true for embedded fields. 😄

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

So you may still find it valuable to extract the logic into, say, isPropertyEmbedded.

@jsamouh

jsamouh commented Mar 13, 2017

Copy link
Copy Markdown
Contributor Author

To explain a little bit:

  • Embed field is a nested property. So it makes sense according to me to recognize this field as a nested property. However, we need to dissociate nestedAssociation versus nestedEmbedded.
  • So I create the method isPropertyNestedEmbedded in AbstractFilter and apply it when necessary. This functions just needs to know if the Metadata owns this fields. An Embed field is managed like a simple field
  • I modify a little bit the method isBooleanField in BooleanFilter to retrieve metadata in the same way as the function isPropertyMapped in AbstractFilter
  • I modify the QueryNameGenerator of API platform to replace . by _ cause it generates an error when we set the parameter (not pretty)
  • I did not develop isPropertyAssociation cause it costs performance so I prefer to use isPropertyNested and use Negation in the code to know if the property is a nested association

@soyuka

soyuka commented Mar 13, 2017

Copy link
Copy Markdown
Member

Is this issue limited to the booleanFilter?

@jsamouh

jsamouh commented Mar 13, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka , for the moment yes. I'm waiting your feedback before to apply it in any filter and write STRONG tests about this

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch 2 times, most recently from 572a083 to 08f0acb Compare March 13, 2017 15:36
@jsamouh

jsamouh commented Mar 13, 2017

Copy link
Copy Markdown
Contributor Author

@teohhanhui @soyuka , second commit for discussion (apply the code in all filters). No unit and functional tests are developped for the moment. But existing tests success

@soyuka

soyuka commented Mar 13, 2017

Copy link
Copy Markdown
Member

Better, I'd need @teohhanhui to confirm but I think that we break backward changes by adding $resourceClass. This'll have to target master.

@jordscream would be nice to have a functional test involving those embedded properties. For unit tests, coverage looks fine not sure you'd be able to add much.

@jsamouh

jsamouh commented Mar 13, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka , no problem for functionnal test, writing in progress

@antograssiot

Copy link
Copy Markdown
Contributor

In unit test, I might be wrong but I wanted to make sure that the filter description worked ok.

@jsamouh

jsamouh commented Mar 14, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka

soyuka commented Mar 14, 2017

Copy link
Copy Markdown
Member

dropSchema executes after the scenario is complete (https://github.com/api-platform/core/blob/2.0/features/bootstrap/FeatureContext.php#L88).

Doing this there ensures that the next scenario has a clean database

@jsamouh

jsamouh commented Mar 14, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka My apologize....

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch from 08f0acb to 2d95b70 Compare March 14, 2017 17:05
@jsamouh

jsamouh commented Mar 14, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka @teohhanhui I had functionnal tests.

Tell me if it is enough. The most important to me is to test of at least on filter a model like this entity.relation.embed.field.

@jsamouh

jsamouh commented Mar 15, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka @teohhanhui any news ? :-)

Comment thread features/doctrine/date_filter.feature Outdated
And the JSON should be equal to:
"""
{
{

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Indentation looks wrong here but it's maybe github failing

Comment thread features/doctrine/date_filter.feature Outdated
Then the response status code should be 200
And the response should be in JSON
And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8"
And the JSON should be equal to:

@soyuka soyuka Mar 15, 2017

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Would it be possible to use a schema here instead? Or you can play with JSON node should equal. It's a pain to maintain when we add more filters.

}
]
}
}

@soyuka soyuka Mar 15, 2017

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Same indentation looks weird here from github POV. This is the maintain mess I'm talking about above :p.

@soyuka

soyuka commented Mar 15, 2017

Copy link
Copy Markdown
Member

Shit failed the review thing \o/. Anyway great job there! However, this has a BC break and should target master.

@jsamouh

jsamouh commented Mar 15, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka @teohhanhui , thanks for your feedback. I gonna check indentation and I will rebase to master.

Just 2 questions:

  • Why it is a BC breaks ?
  • @soyuka , can you give me more details about your comment ? I am not sure to understand

Thanks API platform Team !

@soyuka

soyuka commented Mar 15, 2017

Copy link
Copy Markdown
Member

Why it is a BC breaks ?

Because it alters methods that custom filters might use by extending our AbstractFilter.

For example, I use it with extractProperties, if I update it'll break my code because the second argument is mandatory. There was no argument before. Break.

can you give me more details about your comment ? I am not sure to understand

which one?

@jsamouh

jsamouh commented Mar 15, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka Ok , thanks for the explanation

This comment:
Would it be possible to use a schema here instead? Or you can play with JSON node should equal. It's a pain to maintain when we add more filters.

@soyuka

soyuka commented Mar 15, 2017

Copy link
Copy Markdown
Member

Oh yes, just like you did the other tests, you're using And the JSON should be valid according to this schema: instead of And the JSON should be equal to:.

When I speak about nodes you can write tests like this as well:

And the JSON node "_embedded.item" should have 1 element 

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch from 2d95b70 to 9b4ef0f Compare March 16, 2017 10:54
@jsamouh

jsamouh commented Mar 16, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka , not sure of my modification according your comment but I did it in boolean_filter.feature. Can you tell me if it is ok for you before I modify my other functionnal test ?

thanks

@soyuka soyuka left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The first test is correct, the other ones should match a schema instead of comparing the full json. Nice work!

Then the response status code should be 200
And the response should be in JSON
And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8"
And the JSON should be equal to:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

And the JSON should be valid according to this schema:

Then the response status code should be 200
And the response should be in JSON
And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8"
And the JSON should be equal to:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

And the JSON should be valid according to this schema:

@jsamouh

jsamouh commented Mar 16, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka
ah, according your comments , you say to me to do the opposite :-)

Oh yes, just like you did the other tests, you're using And the JSON should be valid according to this schema: instead of And the JSON should be equal to

So I need to replace all my the JSON should be equal to by And the JSON should be valid according to this schema ?

@soyuka

soyuka commented Mar 16, 2017

Copy link
Copy Markdown
Member

Oh sorry about this, rephrasing :

use schema instead of full json equality for the sake of maintainability.

Really sorry that you misunderstood this I was just doing too many things at once yesterday and speaking 3 languages at the same time makes it hard to write comprehensible things sometimes :|.

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch from 7f5a2d7 to 4090a85 Compare April 18, 2017 21:25
@jsamouh

jsamouh commented Apr 18, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka , I revert my change about functional test to not alter the existing functional test
Let me know if it is okay for you

Comment thread tests/Fixtures/app/config/config.yml Outdated
parent: 'api_platform.doctrine.orm.order_filter'
arguments: [ { 'id': ~, 'name': 'desc', 'relatedDummy.symfony': ~ } ]
tags: [ { name: 'api_platform.filter' } ]
arguments: [ { 'id': ~, 'name': 'desc', 'relatedDummy.name': ~, 'embeddedDummy.dummyName': 'desc' } ]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

you removed relatedDummy.symfony order, I assume this is wanted? As long as tests pass it's ok to me 👍

@soyuka

soyuka commented Apr 19, 2017

Copy link
Copy Markdown
Member

php-cs-fixer failed, you can check the diff on travis

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch 2 times, most recently from 462ee9d to 40cf084 Compare April 21, 2017 14:46
@jsamouh

jsamouh commented Apr 21, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka done (normally)

@meyerbaptiste meyerbaptiste left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Fix my comments and phpstan should be happy!

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', get_class($this), __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Your sprintf() has too many args.

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', get_class($this), __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Your sprintf() has too many args.

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', get_class($this), __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Your sprintf() has too many args.

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', get_class($this), __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Your sprintf() has too many args.

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', get_class($this), __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Your sprintf() has too many args.

@jsamouh
jsamouh force-pushed the nested-embed-field-filter branch from 02370a1 to 61ec985 Compare April 28, 2017 18:34
@jsamouh

jsamouh commented Apr 28, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka travis/appveyor failed is really linked to what i did ?

@soyuka

soyuka commented Apr 29, 2017

Copy link
Copy Markdown
Member

@jordscream yeah you added an embeddedDummy property I think. It fails on the following equality:

          {
            "@id": "/related_dummies/1",
            "@type": "https://schema.org/Product",
            "id": 1,
            "name": "Hello",
            "symfony": "symfony",
            "dummyDate": null,
            "thirdLevel": "/third_levels/1",
            "relatedToDummyFriend": [],
            "dummyBoolean": null,
            "age": null
          },
              {
                  "@id": "\/related_dummies\/1",
                  "@type": "https:\/\/schema.org\/Product",
                  "id": 1,
                  "name": "Hello",
                  "symfony": "symfony",
                  "dummyDate": null,
                  "thirdLevel": "\/third_levels\/1",
                  "relatedToDummyFriend": [],
                  "dummyBoolean": null,
                  "embeddedDummy": [],
                  "age": null
              },

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will have a two second argument

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will have a two second argument

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will have a two second argument

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will have a two second argument

if (__CLASS__ !== get_class($this)) {
$r = new \ReflectionMethod($this, __FUNCTION__);
if (__CLASS__ !== $r->getDeclaringClass()->getName()) {
@trigger_error(sprintf('Method %s() will have a two `$resourceClass` argument in version API Platform 3.0. Not defining it is deprecated since API Platform 2.1.', __FUNCTION__), E_USER_DEPRECATED);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

will have a two second argument

<?php

declare(strict_types=1);
/*

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a blank line here.

@@ -0,0 +1,144 @@
<?php

declare(strict_types=1);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a blank line here.

@blaues0cke

blaues0cke commented May 15, 2017

Copy link
Copy Markdown

Just FYI: Pointed a project I worked on for over 4 months to this pull request and everything (including the filters on embedded entities) worked like a charm without any error at all!

@dunglas

dunglas commented May 15, 2017

Copy link
Copy Markdown
Member

@jordscream do you think you can handle the last few comments?

@jsamouh

jsamouh commented May 15, 2017

Copy link
Copy Markdown
Contributor Author

@dunglas , yes will do this week :-)

@soyuka
soyuka force-pushed the nested-embed-field-filter branch 3 times, most recently from b7d48bf to c29a322 Compare May 23, 2017 13:59
@soyuka

soyuka commented May 23, 2017

Copy link
Copy Markdown
Member

@jordscream just so you know (and you don't force push 😛) I fixed the last comments and rebased against master :).

@soyuka
soyuka force-pushed the nested-embed-field-filter branch from c29a322 to 5dc1b08 Compare May 23, 2017 14:36
@dunglas
dunglas merged commit 8ed3bdc into api-platform:master May 23, 2017
@dunglas

dunglas commented May 23, 2017

Copy link
Copy Markdown
Member

Thanks @jordscream and @soyuka!

@meyerbaptiste meyerbaptiste left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Arf too late!

* @Given there is :nb embedded dummy objects with embeddedDummy.dummyBoolean :bool
*/
public function thereIsDummyObjectsWithEmbeddedDummyBoolean($nb, $bool)
{

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What about filter_var($bool, FILTER_VALIDATE_BOOLEAN)?

if (null === $bool = filter_var($bool, FILTER_VALIDATE_BOOLEAN) {
    throw new ...;
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This wasn't part of this PR or was it? I think there was a reason we didn't use that. I'll look into this.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It was and I don't see any reason 😛

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Okay so did some digging. This actually comes from #1010 and I used the same code as we already use in the BooleanFilter for consistency.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

"on" / "off" support in boolean filter was removed. That's where this modification is comming from IIRC

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Note that I'm sure we talked about FILTER_VALIDATE_BOOLEAN when working on the boolean filter, IIRC it was with @teohhanhui.

@meyerbaptiste meyerbaptiste May 23, 2017

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Hmm, I don't see what can block here. We're not talking about a filter but a setter. It's just a step definition with an argument which is converted to a pure boolean in all cases! So why couldn't we use FILTER_VALIDATE_BOOLEAN?🤔

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Sure, can add it to my todolist.

@teohhanhui teohhanhui May 24, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can we all stop using filter_var, please? 😞 Burn it with fire!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Maybe with some explanations! 😛

"@id": {
"type": "string",
"pattern": "^/dummies/2$"
"pattern": "^/dummies/2"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Why?

And the JSON should be equal to:
"""
{
{

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Indentation!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks, rebasing behat features is a mess. Fixed in #1137

@jsamouh

jsamouh commented May 23, 2017

Copy link
Copy Markdown
Contributor Author

@soyuka @dunglas sorry for my late
Cool to have merged :-)

hoangnd25 pushed a commit to hoangnd25/core that referenced this pull request Feb 23, 2018
…d-filter

Manage embedded fields for API Platform Filter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants