-
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
DataProviders
andDataPersisters
in favor ofProviders
andProcessors
, respectively. Due to this change, Sylius customDataProviders
andDataPersisters
have been adapted to the new API Platform interfaces and their namespaced have been changed toStateProvider
andStateProcessor
respectively:
Sylius\Bundle\ApiBundle\DataPersister\*DataPersister
=>Sylius\Bundle\ApiBundle\StateProcessor\*Processor
Sylius\Bundle\ApiBundle\DataProvider\*DataProvider
=>Sylius\Bundle\ApiBundle\StateProvider\*Provider
- API Platform has also dropped
DataTransformers
in favor of whichsome of them
have been refactored intoSerializerContextBuilders
as follows:
Sylius\Bundle\ApiBundle\DataTransformer\ChannelCodeAwareInputCommandDataTransformer
=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilder
Sylius\Bundle\ApiBundle\DataTransformer\LocaleCodeAwareInputCommandDataTransformer
=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\LocaleCodeAwareContextBuilder
Sylius\Bundle\ApiBundle\DataTransformer\LoggedInCustomerEmailIfNotSetAwareCommandDataTransformer
=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\LoggedInCustomerEmailIfNotSetAwareContextBuilder
Sylius\Bundle\ApiBundle\DataTransformer\LoggedInShopUserIdAwareCommandDataTransformer
=>Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilder
- The constructor of
Sylius\Bundle\ApiBundle\Command\Account\RegisterShopUser
has 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\RequestResetPasswordToken
has been changed:
public function __construct(
- public string $email,
+ protected string $email,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
) {
}
- The constructor of
Sylius\Bundle\ApiBundle\Command\SendContactRequest
has 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\VerifyShopUser
has 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\ChangeShopUserPassword
has 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\RequestShopUserVerification
has 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::__construct
has been changed:
public function __construct(
private FactoryInterface $avatarImageFactory,
private AvatarImageRepositoryInterface $avatarImageRepository,
- private ImageUploaderInterface $imageUploader,
- private IriConverterInterface $iriConverter,
+ private RepositoryInterface $adminUserRepository,
+ private ImageUploaderInterface $imageUploader,
)
-
The
getCurrentPrefix
method has been removed from theSylius\Bundle\ApiBundle\Provider\PathPrefixProviderInterface
. -
The
Sylius\Bundle\ApiBundle\Provider\PathPrefixProvider
constructor 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
applyToCollection
of the following classes has been changed:Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AcceptedProductReviewsExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AddressesExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\AvailableProductAssociationsInProductCollectionExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\CountryCollectionExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\CurrencyCollectionExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\EnabledProductVariantsExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\HideArchivedShippingMethodExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\LocaleCollectionExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\OrdersByChannelExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\OrdersByLoggedInUserExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsByChannelAndLocaleCodeExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsByTaxonExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsWithEnableFlagExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\ProductsWithEnableFlagExtension
Sylius\Bundle\ApiBundle\Doctrine\QueryCollectionExtension\RestrictingFilterEagerLoadingExtension
Sylius\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\PathHiderDocumentationModifier
class and service have been removed. Thesylius.api.paths_to_hide
parameter used in this class has also been removed. We recommend defining endpoints with theApiPlatform\Metadata\NotExposed
class to hide specific operations. -
The following parameters have been renamed:
Old parameter New parameter sylius.security.new_api_route
sylius.security.api_route
sylius.security.new_api_regex
sylius.security.api_regex
sylius.security.new_api_admin_route
sylius.security.api_admin_route
sylius.security.new_api_admin_regex
sylius.security.api_admin_regex
sylius.security.new_api_shop_route
sylius.security.api_shop_route
sylius.security.new_api_shop_regex
sylius.security.api_shop_regex
sylius.security.new_api_user_account_route
sylius.security.api_shop_account_route
sylius.security.new_api_user_account_regex
sylius.security.api_shop_account_regex
-
The following configuration parameters have been removed:
sylius_api.legacy_error_handling
sylius_api.serialization_groups.skip_adding_read_group
sylius_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\VerifyCustomerAccount
command has been renamed toSylius\Bundle\ApiBundle\Command\Account\VerifyShopUser
. - The
Sylius\Bundle\ApiBundle\Command\Account\ResendVerificationEmail
command 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/id
andGET /api/v2/admin/payment-methods/{code}/gateway-config
are 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
Channel
resource. - 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
Channel
resource. - 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
Zone
resource. - 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
ProductOptionValueTranslation
resource 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"]
+ }
id
has been removed fromshop
GET
responses.orderNumber
has been removed from orders inshop
itemGET
.channel
has been added to orders inshop
itemGET
.customerEmail
is now exposed in the orderGET
response forshop
.state
has been added to the orderGET
response forshop
.customerIp
has been added to the admin serialization configuration.
+ "channel": "/api/v2/shop/channels/WEB",
+ "customer": {
+ "@id": "/api/v2/shop/customers/123",
+ "@type": "Customer",
+ "email": "[email protected]"
+ },
+ "state": "cart",
+ "customerIp": "192.168.1.2",
- "id": 1
The 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"}
]
}