Sulu: error when trying to use custom data provider

452 Views Asked by At

I'm following docs from here: https://docs.sulu.io/en/2.2/cookbook/smart-content-data-provider.html

Trying to make custom data provider for my custom entity type "MatchEvent":

I did it how it's explained here. Since I have services.yaml file I defined those 2 like this:

app.match_event_repository:
    class: App\Repository\MatchEventRepository
    factory: ['@doctrine', 'getRepository']
    arguments:
        - Symfony\Bridge\Doctrine\ManagerRegistry

app.smart_content.data_provider.matchevent:
    class: App\SmartContent\MatchEventDataProvider
    arguments: ['@app.match_event_repository', '@sulu_core.array_serializer', '@request_stack' ]
    tags: [{name: 'sulu.content.type', alias: 'smart_matchevent_selection'}]

So, if I understood well, after that I should have my custom content data provider named "smart_matchevent_selection" and I can use it like this:

    <property name="match" type="smart_content">
        <meta>
            <title lang="en">Match</title>
            <title lang="de">Match</title>
        </meta>

        <params>
            <param name="provider" value="smart_matchevent_selection"/>
        </params>
    </property>

But when I try to edit page containing this field I get error:

Missing parameter token in Sulu\Bundle\PreviewBundle\Controller\PreviewController

Exception is triggered at project/vendor/sulu/sulu/src/Sulu/Bundle/PreviewBundle/Controller/PreviewController.php:

public function stopAction(Request $request): Response
{
    $this->preview->stop($this->getRequestParameter($request, 'token', true));

    return new JsonResponse();
}

What I'm doing wrong here?

1

There are 1 best solutions below

7
On BEST ANSWER

If you carefully look at the service definition of the SmartContentDataProvider in the documentation, you will notice that the tag should be {name: 'sulu.smart_content.data_provider', alias: 'match_events'} instead of {name: 'sulu.content.type', alias: 'smart_matchevent_selection'} ...

Then you can use it like <param name="provider" value="match_events"/>