Read the previous chapter to create a new resource. In order for your resource to truly become a Sylius Resource, you will need to configure a couple of things.
First, to declare your resource as a Sylius Resource, implement the Sylius\Component\Resource\Model\ResourceInterface, which requires defining a getId() method to uniquely identify the resource.
Next, add the #[AsResource] PHP attribute to your Doctrine entity to register it as a Sylius resource.
Run the following command to verify that your resource is correctly configured.
By default, the alias for your Sylius resource will be app.book, which combines the application name and the resource name with this format : {application}.{resource}.
Advanced configuration
Configure the resource name
You can override your resource's name via the name parameter of the AsResource PHP attribute.
In this example, the order variable is replaced with cart in your Twig templates. As a result, for the show operation, the following Twig variables will be available within the template:
Name
Type
resource
App\Entity\Order
cart
App\Entity\Order
operation
Sylius\Resource\Metadata\Show
resource_metadata
Sylius\Resource\Metadata\ResourceMetadata
app
Symfony\Bridge\Twig\AppVariable
Configure the resource plural name
You can override your resource's plural name via the pluralName parameter of the AsResource PHP attribute.
In this example, the books variable is replaced with library in your Twig templates. As a result, for the index operation, the following Twig variables will be available within the template:
Name
Type
resources
Pagerfanta\Pagerfanta
library
Pagerfanta\Pagerfanta
operation
Sylius\Resource\Metadata\Index
resource_metadata
Sylius\Resource\Metadata\ResourceMetadata
app
Symfony\Bridge\Twig\AppVariable
Configure additional resource vars
You can define simple variables within the AsResource attribute via the vars parameter.
You can then access these variables in your Twig templates. These variables will be available for every operation associated with this resource.
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource]
class Book implements ResourceInterface
{
}
Resource Metadata
-----------------
------------------------ -------------------
Option Value
------------------------ -------------------
alias "app.book"
section null
formType null
templatesDir null
routePrefix null
name "book"
pluralName null
applicationName "app"
identifier null
normalizationContext null
denormalizationContext null
validationContext null
class "App\Entity\Book"
driver null
vars null
------------------------ -------------------
[...]
src/Entity/Order.php
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource(name: 'cart')]
class Order implements ResourceInterface
{
}
src/Entity/Book.php
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource(pluralName: 'library')]
class Book implements ResourceInterface
{
}
src/Entity/Book.php
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource(
vars: [
'header' => 'Library',
'subheader' => 'Managing your library',
],
)]
class Book implements ResourceInterface
{
}