-
The following classes were removed:
Sylius\Bundle\ApiBundle\EventListener\PostgreSQLDriverExceptionListener
-
The following services were removed:
sylius.listener.api_postgresql_driver_exception_listener
-
Non-prefix serialization groups in Sylius resources have been removed. If you have extended any of them, you must prefix them with
sylius:, for example:- #[Groups(['admin:product:index'])] + #[Groups(['sylius:admin:product:index'])]
-
API Platform has dropped
DataProvidersandDataPersistersin favor ofProvidersandProcessors, respectively. Due to this change, Sylius customDataProvidersandDataPersistershave been adapted to the new API Platform interfaces and their namespaced have been changed toStateProviderandStateProcessorrespectively:
Sylius\Bundle\ApiBundle\DataPersister\*DataPersister=>Sylius\Bundle\ApiBundle\StateProcessor\*ProcessorSylius\Bundle\ApiBundle\DataProvider\*DataProvider=>Sylius\Bundle\ApiBundle\StateProvider\*Provider
- API Platform has also dropped
DataTransformersin favor of whichsome of themhave been refactored intoSerializerContextBuildersas follows:
Sylius\Bundle\ApiBundle\DataTransformer\ChannelCodeAwareInputCommandDataTransformer=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilderSylius\Bundle\ApiBundle\DataTransformer\LocaleCodeAwareInputCommandDataTransformer=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\LocaleCodeAwareContextBuilderSylius\Bundle\ApiBundle\DataTransformer\LoggedInCustomerEmailIfNotSetAwareCommandDataTransformer=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\LoggedInCustomerEmailIfNotSetAwareContextBuilderSylius\Bundle\ApiBundle\DataTransformer\LoggedInShopUserIdAwareCommandDataTransformer=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilder
- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\RegisterShopUserhas been changed:
public function __construct(
- public string $firstName,
- public string $lastName,
- public string $email,
- public string $password,
- public bool $subscribedToNewsletter = false,
+ protected string $firstName,
+ protected string $lastName,
+ protected string $email,
+ protected string $password,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
+ protected bool $subscribedToNewsletter = false,
) {
}- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\RequestResetPasswordTokenhas been changed:
public function __construct(
- public string $email,
+ protected string $email,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
) {
}- The constructor of
Sylius\Bundle\ApiBundle\Command\SendContactRequesthas been changed:
public function __construct(
- private ?string $email = null,
- private ?string $message = null,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
+ protected ?string $email = null,
+ protected ?string $message = null,
) {
}- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\VerifyShopUserhas been changed:
public function __construct(
- public string $token,
- private ?string $localeCode = null,
- private ?string $channelCode = null,
+ protected string $token,
+ protected string $channelCode,
+ protected string $localeCode,
) {
}- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\ChangeShopUserPasswordhas been changed:
public function __construct(
- public ?string $newPassword,
- public ?string $confirmNewPassword,
- public ?string $currentPassword,
+ protected mixed $shopUserId,
+ protected string $newPassword,
+ protected string $confirmNewPassword,
+ protected string $currentPassword,
) {
}- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\RequestShopUserVerificationhas been created:
public function __construct(
+ protected string|int|null $shopUserId,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
) {
}All the setter methods have been removed from the commands above and also there are some new getter methods accordingly to arguments visibility changes.
- The parameter type and order of the
Sylius\Bundle\ApiBundle\Controller\UploadAvatarImageAction::__constructhas been changed:
public function __construct(
private FactoryInterface $avatarImageFactory,
private AvatarImageRepositoryInterface $avatarImageRepository,
- private ImageUploaderInterface $imageUploader,
- private IriConverterInterface $iriConverter,
+ private RepositoryInterface $adminUserRepository,
+ private ImageUploaderInterface $imageUploader,
)-
The
getCurrentPrefixmethod has been removed from theSylius\Bundle\ApiBundle\Provider\PathPrefixProviderInterface. -
The
Sylius\Bundle\ApiBundle\Provider\PathPrefixProviderconstructor has been changed due to refactor. Now, we provide the list of possible prefixes that we check in this service. This list can be set under the parameter:sylius.api_path_prefixes.public function __construct( - private UserContextInterface $userContext, private string $apiRoute, + private array $pathPrefixes, ) { ... }
-
The signature of method
applyToCollectionof the following classes has been changed:Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AcceptedProductReviewsExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AddressesExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AvailableProductAssociationsInProductCollectionExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\CountryCollectionExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\CurrencyCollectionExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\EnabledProductVariantsExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\HideArchivedShippingMethodExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\LocaleCollectionExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\OrdersByChannelExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\OrdersByLoggedInUserExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsByChannelAndLocaleCodeExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsByTaxonExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsWithEnableFlagExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsWithEnableFlagExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\RestrictingFilterEagerLoadingExtensionSylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\TaxonCollectionExtension
public function applyToCollection(
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
- string $operationName = null,
+ \ApiPlatform\Metadata\Operation $operation = null,
array $context = [],
): void;-
The
Sylius\Bundle\ApiBundle\OpenApi\Documentation\PathHiderDocumentationModifierclass and service have been removed. Thesylius.api.paths_to_hideparameter used in this class has also been removed. We recommend defining endpoints with theApiPlatform\Metadata\NotExposedclass to hide specific operations. -
The following parameters have been renamed:
Old parameter New parameter sylius.security.new_api_routesylius.security.api_routesylius.security.new_api_regexsylius.security.api_regexsylius.security.new_api_admin_routesylius.security.api_admin_routesylius.security.new_api_admin_regexsylius.security.api_admin_regexsylius.security.new_api_shop_routesylius.security.api_shop_routesylius.security.new_api_shop_regexsylius.security.api_shop_regexsylius.security.new_api_user_account_routesylius.security.api_shop_account_routesylius.security.new_api_user_account_regexsylius.security.api_shop_account_regex
-
The following configuration parameters have been removed:
sylius_api.legacy_error_handlingsylius_api.serialization_groups.skip_adding_read_groupsylius_api.serialization_groups.skip_adding_index_and_show_groups
| Resource | Original Route | Updated Route |
|---|---|---|
| AvatarImage | GET - /api/v2/admin/avatar-images/{id} |
GET - /api/v2/admin/administrators/{id}/avatar-image |
POST - /api/v2/admin/avatar-images |
POST - /api/v2/admin/administrators/{id}/avatar-image |
|
DELETE - /api/v2/admin/avatar-images/{id} |
DELETE - /api/v2/admin/administrators/{id}/avatar-image |
|
| ShopUser, CustomerPassword, CustomerVerification | POST - /api/v2/shop/reset-password-requests |
POST - /api/v2/shop/reset-password |
PATCH - /api/v2/shop/reset-password-requests/{resetPasswordToken} |
PATCH - /api/v2/shop/reset-password/{resetPasswordToken} |
|
POST - /api/v2/shop/account-verification-requests |
POST - /api/v2/shop/verify-shop-user |
|
PATCH - /api/v2/shop/account-verification-requests/{token} |
PATCH - /api/v2/shop/verify-shop-user/{token} |
|
| AdminUserPassword | POST - /api/v2/admin/reset-password-requests |
POST - /api/v2/admin/reset-password |
PATCH - /api/v2/admin/reset-password-requests/{resetPasswordToken} |
PATCH - /api/v2/admin/reset-password/{resetPasswordToken} |
|
| CatalogPromotion | GET - /api/v2/admin/catalog-promotion-actions/{id} |
GET - /api/v2/admin/catalog-promotions/{code}/actions/{id} |
GET - /api/v2/admin/catalog-promotion-scopes/{id} |
GET - /api/v2/admin/catalog-promotions/{code}/scopes/{id} |
|
| Translation | GET - /api/v2/admin/[resource]-translations/{id} |
GET - /api/v2/admin/[resource]/{code}/translations/{localeCode} |
| ChannelPricing | GET - /api/v2/admin/channel-pricings/{id} |
GET - /api/v2/admin/product-variants/{code}/pricing/{id} |
| Order | GET - /api/v2/admin/order-items/{id} |
GET - /api/v2/admin/orders/{orderToken}/items/{id} |
| Payment | GET - /api/v2/shop/payments/{id} |
GET - /api/v2/shop/orders/{orderToken}/payments/{id} |
| Product | GET - /api/v2/admin/product-images/{id} |
GET - /api/v2/admin/products/{code}/images/{id} |
GET - /api/v2/admin/products-images |
GET - /api/v2/admin/products/{code}/images |
|
GET - /api/v2/shop/product-images/{id} |
GET - /api/v2/shop/products/{code}/images/{id} |
|
GET - /api/v2/admin/product-option-values/{code} |
GET - /api/v2/admin/product-options/{optionCode}/values/{code} |
|
GET - /api/v2/shop/product-option-values/{code} |
GET - /api/v2/shop/product-options/{optionCode}/values/{code} |
|
| Promotion | GET - /api/v2/admin/promotion-actions/{id} |
GET - /api/v2/admin/promotions/{code}/actions/{id} |
GET - /api/v2/admin/promotion-coupons/{id} |
GET - /api/v2/admin/promotions/{code}/coupons/{id} |
|
POST - /api/v2/admin/promotion-coupons/generate |
POST - /api/v2/admin/promotions/{promotionCode}/coupons/generate |
|
PUT - /api/v2/admin/promotion-coupons/{code} |
PUT - /api/v2/admin/promotions/{promotionCode}/coupons/{couponCode} |
|
DELETE - /api/v2/admin/promotion-coupons/{code} |
DELETE - /api/v2/admin/promotions/{promotionCode}/coupons/{couponCode} |
|
GET - /api/v2/admin/promotion-rules/{id} |
GET - /api/v2/admin/promotions/{code}/rules/{id} |
|
| Provinces | GET - /api/v2/admin/provinces/{code} |
GET - /api/v2/admin/countries/{countryCode}/provinces/{provinceCode} |
PUT - /api/v2/admin/provinces/{code} |
PUT - /api/v2/admin/countries/{countryCode}/provinces/{provinceCode} |
|
GET - /api/v2/shop/provinces/{code} |
GET - /api/v2/shop/countries/{countryCode}/provinces/{provinceCode} |
|
| Shipment | GET - /api/v2/shop/shipments/{id} |
GET - /api/v2/shop/orders/{orderToken}/shipments/{id} |
| Taxon | GET - /api/v2/admin/taxon-images/{id} |
GET - /api/v2/admin/taxons/{code}/images/{id} |
POST - /api/v2/admin/taxon-images |
POST - /api/v2//admin/taxons/{code}/images |
|
PUT - /api/v2/admin/taxon-images/{id} |
PUT - /api/v2/admin/taxons/{code}/images/{id} |
|
DELETE - /api/v2/admin/taxon-images/{id} |
DELETE - /api/v2/admin/taxons/{code}/images/{id} |
|
GET - /api/v2/shop/taxon-images/{id} |
GET - /api/v2/shop/taxons/{code}/images/{id} |
-
CustomerVerification
- The
Sylius\Bundle\ApiBundle\Command\Account\VerifyCustomerAccountcommand has been renamed toSylius\Bundle\ApiBundle\Command\Account\VerifyShopUser. - The
Sylius\Bundle\ApiBundle\Command\Account\ResendVerificationEmailcommand has been renamed toSylius\Bundle\ApiBundle\Command\Account\RequestShopUserVerification.
- The
-
GatewayConfig
- The resource is no longer exposed; the endpoints
GET /api/v2/admin/gateway-configs/idandGET /api/v2/admin/payment-methods/{code}/gateway-configare no longer available.
- The resource is no longer exposed; the endpoints
-
Translation
- All translation resources are no longer exposed, as each one is now integrated into its main resource.
-
ChannelPriceHistoryConfig
- The resource configuration is now managed by the
Channelresource. - Removed endpoints:
GET /api/v2/admin/channel-price-history-configs/{id}PUT /api/v2/admin/channel-price-history-configs/{id}
- The resource configuration is now managed by the
-
ShopBillingData
- The resource configuration is now managed by the
Channelresource. - Removed endpoints:
GET /api/v2/admin/shop-billing-datas/{id}GET /api/v2/admin/channels/{code}/shop-billing-data
- The resource configuration is now managed by the
-
ZoneMember
- The resource configuration is now managed by the
Zoneresource. - Removed endpoints:
GET /api/v2/admin/zone-members/{id}GET /api/v2/admin/zones/{code}/members
- The resource configuration is now managed by the
-
ProductOptionValueTranslation
- A new resource configuration has been added for the
ProductOptionValueTranslationresource it is now possible to manage translations for product option values.
- A new resource configuration has been added for the
Management for ChannelPriceHistoryConfig has been moved to the Channel resource. The PUT request for Channel now includes channelPriceHistoryConfig fields:
Updated Channel PUT Request Body:
"menuTaxon": "home-accessories",
+ "channelPriceHistoryConfig": {
+ "lowestPriceForDiscountedProductsCheckingPeriod": 30,
+ "lowestPriceForDiscountedProductsVisible": true,
+ "taxonsExcludedFromShowingLowestPrice": ["clearance", "seasonal"]
}ShopBillingData is now managed within the Channel resource and is no longer accessible directly. Retrieving ShopBillingData is now done through the Channel resource.
position is now included in the ProductAttribute request.
{
"code": "BRAND_ATTRIBUTE",
"type": "text",
"configuration": ["visible"],
+ "position": 0,
"translatable": true,
"translations": {
"en_US": "Brand",
"fr_FR": "Marque",
"es_ES": "Marca"
}
}position has been added to the ProductImage request.
{
"productVariants": ["https://example.com/product-variant-1"],
"type": "thumbnail",
+ "position": 0
} - "shopBillingData": "\/api\/v2\/admin\/shop-billing-datas\/{id}",
+ "shopBillingData": {
+ "@type": "ShopBillingData",
+ "company": "Sylius Inc.",
+ "taxId": "123456789",
+ "countryCode": "US",
+ "street": "123 Commerce St.",
+ "city": "eCommerce City",
+ "postcode": "12345"
+ }
- "channelPriceHistoryConfig": "/api/v2/admin/channel-price-history-configs/{id}"
+ "channelPriceHistoryConfig": {
+ "lowestPriceForDiscountedProductsCheckingPeriod": 30,
+ "lowestPriceForDiscountedProductsVisible": true,
+ "taxonsExcludedFromShowingLowestPrice": ["clearance", "seasonal"]
+ }idhas been removed fromshopGETresponses.orderNumberhas been removed from orders inshopitemGET.channelhas been added to orders inshopitemGET.customerEmailis now exposed in the orderGETresponse forshop.statehas been added to the orderGETresponse forshop.customerIphas been added to the admin serialization configuration.
+ "channel": "/api/v2/shop/channels/WEB",
+ "customer": {
+ "@id": "/api/v2/shop/customers/123",
+ "@type": "Customer",
+ "email": "oliver@example.com"
+ },
+ "state": "cart",
+ "customerIp": "192.168.1.2",
- "id": 1The sylius:admin:order_item_unit:show serialization group has been removed as endpoints for OrderItemUnit are no longer exposed.
id has been removed from serialization for all translation resources.
Example: ShippingMethod Get Response:
"translations": {
"en_US": {
"@id": "/api/v2/admin/shipping-method-translations/1",
"@type": "ShippingMethodTranslation",
- "id": 1,
"name": "Standard Shipping",
"description": "Delivery within 5-7 business days"
}
}id is no longer exposed on the shop GET endpoint.
{
"@context": "/api/v2/contexts/ProductAssociationType",
"@id": "/api/v2/shop/product-association-types/similar_products",
"@type": "ProductAssociationType",
- "id": 1,
"code": "similar_products",
"name": "Similar Products"
}position has been added to the ProductImage response for both shop and admin views.
{
"@context": "/api/v2/contexts/ProductImage",
"@id": "/api/v2/admin/products/MUG/images/1",
"@type": "ProductImage",
"id": 1,
"owner": "/api/v2/admin/products/MUG",
"type": "thumbnail",
"path": "https://example.com/images/sylius_original_thumbnail.jpg",
"productVariants": ["/api/v2/admin/product-variants/MUG_BLUE"],
+ "position": 0
}id has been removed from serialization.
{
"@context": "/api/v2/contexts/ProductOption",
"@id": "/api/v2/admin/product-options/COLOR",
"@type": "ProductOption",
- "id": 1,
"code": "COLOR",
"position": 0,
"values": [
"/api/v2/admin/product-options/COLOR/values/COLOR_BLUE",
"/api/v2/admin/product-options/COLOR/values/COLOR_RED"
],
"translations": {
"en_US": {
"@id": "/api/v2/admin/product-options/COLOR/translations/en_US",
"@type": "ProductOptionTranslation",
"name": "Color"
}
}
}id has been removed from serialization.
{
"@context": "/api/v2/contexts/ProductOptionValue",
"@id": "/api/v2/admin/product-option-values/COLOR_BLUE",
"@type": "ProductOptionValue",
- "id": "1",
"code": "COLOR_BLUE",
"option": "/api/v2/admin/product-options/COLOR",
"translations": {
"en_US": {
"value": "Blue"
}
},
"value": "Blue"
}The sylius:admin:province:index serialization group has been added for the index response.
id has been removed from serialization, and the sylius:admin:shop_billing_data:show serialization group has been removed. Company, taxId, countryCode, street, city, and postcode are now exposed on channels admin index and show views.
Example: Channel Get Response
"shopBillingData": {
"@type": "ShopBillingData",
- "id": 1,
"company": "Web Channel Company",
"taxId": "WCH123456",
"countryCode": "EN",
"street": "123 Web St.",
"city": "Web City",
"postcode": "00000"
},id and belongsTo have been removed from serialization, and code has been added to the response for zones admin index and show. The ZoneMember get endpoint has been removed and is now accessible only through the Zone.
Example: Zone Get Response:
{
"@context": "/api/v2/contexts/Zone",
"@id": "/api/v2/admin/zones/WD",
"@type": "Zone",
- "id": 1,
"code": "WD",
"name": "WORLD",
"type": "country",
"scope": "all",
"members": [
- "/api/v2/admin/zone-members/@integer@",
- "/api/v2/admin/zone-members/@integer@",
- "/api/v2/admin/zone-members/@integer@"
+ {"@type": "ZoneMember", "code": "NL"},
+ {"@type": "ZoneMember", "code": "BE"},
+ {"@type": "ZoneMember", "code": "PL"}
]
}