2. Configuring Your Resources

Now you need to configure your first resource. Let’s assume you have a Book entity in your application and it has simple fields:

  • id
  • title
  • author
  • description

Tip

You can see a full exemplary configuration of a typical resource here, in the “How to add a custom model?” cookbook.

2.1. Implement the ResourceInterface in your model class.

<?php

namespace App\Entity;

use Sylius\Component\Resource\Model\ResourceInterface;

class Book implements ResourceInterface
{
    // Most of the time you have the code below already in your class.
    protected $id;

    public function getId()
    {
        return $this->id;
    }
}

2.2. Configure the class as a resource.

In your app/config/config.yml add:

sylius_resource:
    resources:
        app.book:
            classes:
                model: App\Entity\Book

That’s it! Your Book entity is now registered as Sylius Resource.

2.3. You can also configure several doctrine drivers.

Note

Remember that the doctrine/orm driver is used by default.

sylius_resource:
    drivers:
        - doctrine/orm
        - doctrine/phpcr-odm
    resources:
        app.book:
            classes:
                model: App\Entity\Book
        app.article:
            driver: doctrine/phpcr-odm
            classes:
                model: App\Document\ArticleDocument

2.4. Generate API routing.

Tip

Learn more about using Sylius REST API in these articles: REST API Reference, How to use Sylius API? - Cookbook.

Add the following lines to config/routes.yaml:

app_book:
    resource: |
        alias: app.book
    type: sylius.resource_api

After that a full JSON/XML CRUD API is ready to use. Sounds crazy? Spin up the built-in server and give it a try:

$ php bin/console server:run

You should see something like:

Server running on http://127.0.0.1:8000

Quit the server with CONTROL-C.

Now, in a separate Terminal window, call these commands:

$ curl -i -X POST -H "Content-Type: application/json" -d '{"title": "Lord of The Rings", "author": "J. R. R. Tolkien", "description": "Amazing!"}' http://localhost:8000/books/
$ curl -i -X GET -H "Accept: application/json" http://localhost:8000/books/

As you can guess, other CRUD actions are available through this API.

2.5. Generate web routing.

What if you want to render HTML pages? That’s easy! Update the routing configuration:

app_book:
    resource: |
        alias: app.book
    type: sylius.resource

This will generate routing for HTML views.

Run the debug:router command to see available routes:

$ php bin/console debug:router

------------------------ --------------- -------- ------ -------------------------
Name                     Method          Scheme   Host   Path
------------------------ --------------- -------- ------ -------------------------
app_book_show            GET             ANY      ANY    /books/{id}
app_book_index           GET             ANY      ANY    /books/
app_book_create          GET|POST        ANY      ANY    /books/new
app_book_update          GET|PUT|PATCH   ANY      ANY    /books/{id}/edit
app_book_delete          DELETE          ANY      ANY    /books/{id}

Tip

Do you need views for your newly created entity? Read more about Grids, which are a separate bundle of Sylius, but may be very useful for views generation.

You can configure more options for the routing generation but you can also define each route manually to have it fully configurable. Continue reading to learn more!