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'
+--------------------+------------------------------------------------------------+
| name | book |
| application | app |
| driver | doctrine/orm |
| classes.model | App\Entity\Book |
| classes.controller | Sylius\Bundle\ResourceBundle\Controller\ResourceController |
| classes.factory | Sylius\Component\Resource\Factory\Factory |
| classes.form | Sylius\Bundle\ResourceBundle\Form\Type\DefaultResourceType |
+--------------------+------------------------------------------------------------+
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