Configure your resource
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.
Implement the Resource interface
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.
namespace App\Entity;
class Book implements ResourceInterface
{
public function getId(): int
{
return $this->id;
}
}
Use the Resource attribute
Next, add the #[AsResource]
PHP attribute to your Doctrine entity to register it as a Sylius resource.
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource]
class Book implements ResourceInterface
{
}
Run the following command to verify that your resource is correctly configured.
$ bin/console sylius:debug:resource 'App\Entity\Book'
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
------------------------ -------------------
[...]
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.
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource(name: 'cart')]
class Order implements ResourceInterface
{
}
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:
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.
namespace App\Entity;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Model\ResourceInterface;
#[AsResource(pluralName: 'library')]
class Book implements ResourceInterface
{
}
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:
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.
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
{
}
You can then access these variables in your Twig templates. These variables will be available for every operation associated with this resource.
<h1>{{ operation.vars.header }}</h1>
<h2>{{ operation.vars.subheader }}</h2>
Last updated
Was this helpful?