The exceptions
\Shopware\Core\System\SystemConfig\Exception\InvalidDomainException,\Shopware\Core\System\SystemConfig\Exception\InvalidKeyException, and\Shopware\Core\System\SystemConfig\Exception\InvalidSettingValueExceptionwere removed. Use the respective factory methods in\Shopware\Core\System\SystemConfig\SystemConfigExceptioninstead.
The methods \Shopware\Core\System\SystemConfig\SystemConfigService::trace() and \Shopware\Core\System\SystemConfig\SystemConfigService::getTrace() were removed.
The tracing is not needed anymore since the cache rework for 6.7.0.0.
Previously, a price definition was treated as filterable when it implemented a getFilter() method. From now on, price definitions must explicitly implement the
Shopware\Core\Checkout\Cart\Price\Struct\FilterableInterface, which defines the required getFilter() method.
The Symfony validator is not used to check the validity of the honeypot captcha, so if it was used to change the validity of the honeypot captcha, overwrite the isValid method of the honeypot captcha directly.
The $result property of Shopware\Core\Content\Cms\Events\CmsPageLoadedEvent now enforces the Shopware\Core\Content\Cms\CmsPageCollection type instead of the generic Shopware\Core\Framework\DataAbstractionLayer\EntityCollection.
The event constructor now requires CmsPageCollection explicitly, and CmsPageLoadedEvent::getResult() return type has changed from EntityCollection to CmsPageCollection.
The following will be removed in Shopware 6.8.0:
- Twig variables
controllerNameandcontrollerAction - CSS classes
is-ctl-*andis-act-* - JavaScript window properties
window.controllerNameandwindow.actionName
- The old
sw-empty-statecomponent will be removed in the next major version. Please use the newmt-empty-statecomponent instead.
Before:
<sw-empty-state title="short title" subline="longer subline" />After:
<mt-empty-state title="short title" description="longer description"/>The properties $mediaPath and $mediaUpdatedAt from Shopware\Core\Content\Media\Extension\ResolveRemoteThumbnailUrlExtension were removed. Set the values directly into the mediaEntity property.
The variable hasChildren is not set inside the @Storefront/storefront/layout/navigation/offcanvas/item-link.html.twig template anymore, as it should be set in the templates which include these templates. In the default templates this is done in the @Storefront/storefront/layout/navigation/offcanvas/categories.html.twig template.
The $options of all Shopware's custom validator constraint are removed, if you use one of them, please use named argument instead
// Before:
new CustomerEmailUnique(['salesChannelContext' => $context])to
new CustomerEmailUnique(salesChannelContext: $context)Affected constraints are:
\Shopware\Core\Checkout\Customer\Validation\Constraint\CustomerEmailUnique
\Shopware\Core\Checkout\Customer\Validation\Constraint\CustomerPasswordMatches
\Shopware\Core\Checkout\Customer\Validation\Constraint\CustomerVatIdentification
\Shopware\Core\Checkout\Customer\Validation\Constraint\CustomerZipCode
\Shopware\Core\Framework\DataAbstractionLayer\Validation\EntityExists
\Shopware\Core\Framework\DataAbstractionLayer\Validation\EntityNotExists- Use
app:shop-id:changeinstead ofapp:url-change:resolve
The \Shopware\Storefront\Framework\Cookie\CookieProviderInterface and all its implementations were removed.
Use the \Shopware\Core\Content\Cookie\Event\CookieGroupCollectEvent instead to register new cookie groups and cookie entries.
The snippet_name and snippet_description properties on cookies in Twig templates have been removed.
Use name and description instead.
The method \Shopware\Core\Checkout\Document\Zugferd\ZugferdDocument::getPrice() was removed, replace calls to ZugferdDocument::getPrice() with ZugferdDocument::getPriceWithFallback().
The \Shopware\Core\Framework\MessageQueue\ScheduledTask\Scheduler\TaskScheduler::getNextExecutionTime() method was not used anymore and was removed.
The command snippets:validate has been renamed to translation:validate.
The class Shopware\Core\System\Snippet\SnippetValidator is now marked as internal and is supposed to be used for internal purposes only. Use on own risk as it may change without prior notice.
The constructor of the EntityDefinition has been removed, therefore the call of child classes to it need to be removed as well, i.e:
<?php declare(strict_types=1);
namespace MyCustomEntity\Content\Entity;
use Shopware\Core\Content\Media\MediaDefinition;
use Shopware\Core\Content\Product\ProductDefinition;
use Shopware\Core\Framework\DataAbstractionLayer\EntityDefinition;
class MyCustomEntity extends EntityDefinition
{
// snip
public function __construct(private readonly array $meta = [])
{
- parent::__construct();
// ...
}
// snip
}Now the UpdatedBy field will be cleared when an object is updated via the API.
This change ensures that the UpdatedBy field reflects the user who last modified the object through the API, rather than retaining the previous value.
All foreign key checks are now handled directly by the DAL, therefore the following exception handler did not any effect anymore and are removed:
OrderExceptionHandlerNewsletterExceptionHandlerLanguageExceptionHandlerSalesChannelExceptionHandlerThemeExceptionHandlerThis also means that the following exceptions are not thrown anymore and were removed as well:LanguageOfOrderDeleteExceptionLanguageOfNewsletterDeleteExceptionLanguageForeignKeyDeleteExceptionThemeException::themeMediaStillInUseSalesChannelException::salesChannelDomainInUse
Taxes of percentage prices are not recalculated anymore, but use the existing tax calculation of the referenced line items. This prevents rounding errors when calculating taxes for percentage prices.
CartBehavior::isRecalculation was removed.
Please use granular permissions instead, a list of them can be found in Shopware\Core\Checkout\CheckoutPermissions.
Note that a new CartBehaviour should be created with the permissions of the SalesChannelContext.
The method \Shopware\Core\Content\Category\SalesChannel\NavigationRoute::buildName() was removed, navigation routes are now only tagged with NavigationRoute::ALL.
The method Shopware\Core\Content\Seo\SalesChannel\SeoResolverData::get was removed as it's no longer used because it only returns the first entity found, which can lead to inconsistencies when multiple items share the same entity and identifier.
A new method Shopware\Core\Content\Seo\SalesChannel\SeoResolverData::getAll was introduced which returns all items with the given entity and identifier. This change ensures that all relevant items are considered, preventing potential seoUrls loss or misrepresentation.
If you use the method get in your code, you have to use the getAll method instead.
Before
$url = 'https://example.com/cross-selling/product-123';
// Only a single entity is retrieved
$entity = $data->get($definition, $url->getForeignKey());
$seoUrls = $entity->getSeoUrls();
$seoUrls->add($url);After
$url = 'https://example.com/cross-selling/product-123';
$entities = $data->getAll($definition, $url->getForeignKey());
// Now you have to loop through all entities to add the SEO URL
foreach ($entities as $entity) {
$seoUrls = $entity->getSeoUrls();
$seoUrls->add($url);
}For user interfaces that display only one delivery & transaction, there is now a new reference in the order for a primaryOrderDelivery or primaryOrderTransaction.
If an extension modifies or adds new deliveries or transactions, this should be taken into account.
To partly comply with old behaviour, primary deliveries are ordered first and primary transactions are ordered last wherever appropriate.
- Replace delivery accesses like
order.deliveries.first()ororder.deliveries[0]withorder.primaryOrderDelivery - Replace transaction accesses like
order.transactions.last()ororder.transactions[length - 1]withorder.primaryOrderDelivery
The payment method DebitPayment has been removed as it did not fulfill its purpose.
If the payment method is and was not used, it will be removed.
Otherwise, the payment method will be disabled.
- Remove all references to
widgets.account.order.detailand ensure that affected components handle navigation and display correctly
- The
$tcfunction will be completely removed - All translation calls should use
$tinstead
The menu structure on the settings page has changed from tab structure to a grid structure. The new structure groups settings into different categories for better usability. If you extend or customize the settings menu, ensure that your changes are compatible with the new structure.
The new settings groups are:
- General
- Customer
- Automation
- Localization
- Content
- Commerce
- System
- Account
- Extensions
As a result blocks have been removed in sw-settings-index.html.twig:
sw_settings_content_tab_shopsw_settings_content_tab_systemsw_settings_content_tab_pluginssw_settings_content_cardsw_settings_content_headersw_settings_content_card_content
New blocks have been added in sw-settings-index.html.twig:
sw_settings_content_card_content_gridsw_settings_content_card_viewsw_settings_content_card_view_header
The translation of the import/export profile label has been removed.
Profiles are now identified and displayed only by their technical name.
- The
$labelproperty and the following methods inShopware\Core\Content\ImportExport\ImportExportProfileEntityhave been removed:getLabel()setLabel()getTranslations()setTranslations()
- The following classes have been removed:
Shopware\Core\Content\ImportExport\ImportExportProfileTranslationCollectionShopware\Core\Content\ImportExport\ImportExportProfileTranslationDefinitionShopware\Core\Content\ImportExport\ImportExportProfileTranslationEntity
createLog()andgetConfig()inShopware\Core\Content\ImportExport\Service\ImportExportServicenow use$technicalNameinstead of$labelwhen generating filenames.generateFilename()inShopware\Core\Content\ImportExport\Service\FileServicenow uses$technicalNameinstead of$labelas profile name.
- The following Twig blocks have been removed:
sw_import_export_edit_profile_general_container_name(sw-import-export-edit-profile-general.html.twig)sw_import_export_view_profile_profiles_listing_column_label(sw-import-export-view-profiles.html.twig)sw_import_export_language_switch(sw-import-export.html.twig)
- You must explicitly pass a boolean value to the
confidentialparameter of\Shopware\Core\Framework\Api\OAuth\Client\ApiClient. - You must pass the
confidentialparameter as the third parameter of the constructor. - You must pass the
nameparameter as the fourth parameter of the constructor.
The visibility of filesystems cannot be configured in the config array anymore. Instead, it should be set on the same level as type. For example, instead of:
filesystems:
my_filesystem:
type: local
config:
visibility: publicYou should now use:
filesystems:
my_filesystem:
type: local
visibility: publicWe deprecated DomAccess Helper, because it does not add much value compared to native browser APIs and to reduce Shopware specific code complexity. You simply replace its usage with the corresponding native methods. Here are some RegEx to help you:
RegEx: DomAccess\.hasAttribute\(\s*([^,]+)\s*,\s*([^,)]+)(?:,\s*[^)]+)?\)
Replacement: $1.hasAttribute($2)
RegEx: DomAccess\.getAttribute\(\s*([^,]+)\s*,\s*([^,)]+)(?:,\s*[^)]+)?\)
Replacement: $1.getAttribute($2)
RegEx: DomAccess\.getDataAttribute\(\s*([^,]+)\s*,\s*([^,)]+)(?:,\s*[^)]+)?\)
Replacement: $1.getAttribute($2)
RegEx: DomAccess\.querySelector\(\s*([^,]+)\s*,\s*((?:`[^`]*`|'[^']*'|"[^"]*")|[^,)]+)(?:,\s*[^)]+)?\)
Replacement: $1.querySelector($2)
RegEx: DomAccess\.querySelectorAll\(\s*([^,]+)\s*,\s*((?:`[^`]*`|'[^']*'|"[^"]*")|[^,)]+)(?:,\s*[^)]+)?\)
Replacement: $1.querySelectorAll($2)
This method was moved to FocusHandler Helper. Use this instead.
const focusableElements = window.focusHandler.getFocusableElements();This method was moved to FocusHandler Helper. Use this instead.
const firstFocusableEl = window.focusHandler.getFirstFocusableElement();This method was moved to FocusHandler Helper. Use this instead.
const lastFocusableEl = window.focusHandler.getLastFocusableElement();Remove all references to widgets.account.order.detail and ensure that affected components handle navigation and display correctly
Remove all references to @Storefront/storefront/component/checkout/cart-alerts.html.twig and use @Storefront/storefront/utilities/alert.html.twig instead.
NOTE: All the breaking changes described here can be already opted in by activating the v6.8.0.0 feature flag on previous versions.
Details
Details
With the removal of the separate Store-API caching layer with shopware 6.7, those events where not used and emitted anymore, therefore we are removing them now without any replacement.
The concrete events being removed:
\Shopware\Core\Framework\Adapter\Cache\StoreApiRouteCacheKeyEvent\Shopware\Core\Framework\Adapter\Cache\StoreApiRouteCacheTagsEvent\Shopware\Core\Content\Category\Event\CategoryRouteCacheKeyEvent\Shopware\Core\Content\Category\Event\CategoryRouteCacheTagsEvent\Shopware\Core\System\Country\Event\CountryRouteCacheKeyEvent\Shopware\Core\System\Country\Event\CountryRouteCacheTagsEvent\Shopware\Core\System\Country\Event\CountryStateRouteCacheKeyEvent\Shopware\Core\System\Country\Event\CountryStateRouteCacheTagsEvent\Shopware\Core\Content\Product\Events\CrossSellingRouteCacheKeyEvent\Shopware\Core\Content\Product\Events\CrossSellingRouteCacheTagsEvent\Shopware\Core\System\Currency\Event\CurrencyRouteCacheKeyEvent\Shopware\Core\System\Currency\Event\CurrencyRouteCacheTagsEvent\Shopware\Core\Content\LandingPage\Event\LandingPageRouteCacheKeyEvent\Shopware\Core\Content\LandingPage\Event\LandingPageRouteCacheTagsEvent\Shopware\Core\System\Language\Event\LanguageRouteCacheKeyEvent\Shopware\Core\System\Language\Event\LanguageRouteCacheTagsEvent\Shopware\Core\Content\Category\Event\NavigationRouteCacheKeyEvent\Shopware\Core\Content\Category\Event\NavigationRouteCacheTagsEvent\Shopware\Core\Checkout\Payment\Event\PaymentMethodRouteCacheKeyEvent\Shopware\Core\Checkout\Payment\Event\PaymentMethodRouteCacheTagsEvent\Shopware\Core\Content\Product\Events\ProductDetailRouteCacheKeyEvent\Shopware\Core\Content\Product\Events\ProductDetailRouteCacheTagsEvent\Shopware\Core\Content\Product\Events\ProductListingRouteCacheKeyEvent\Shopware\Core\Content\Product\Events\ProductListingRouteCacheTagsEvent\Shopware\Core\Content\Product\Events\ProductSearchRouteCacheKeyEvent\Shopware\Core\Content\Product\Events\ProductSearchRouteCacheTagsEvent\Shopware\Core\Content\Product\Events\ProductSuggestRouteCacheKeyEvent\Shopware\Core\Content\Product\Events\ProductSuggestRouteCacheTagsEvent\Shopware\Core\System\Salutation\Event\SalutationRouteCacheKeyEvent\Shopware\Core\System\Salutation\Event\SalutationRouteCacheTagsEvent\Shopware\Commercial\AISearch\ImageUploadSearch\Event\SearchTerm\SearchTermRouteCacheKeyEvent\Shopware\Commercial\AISearch\ImageUploadSearch\Event\SearchTerm\SearchTermRouteCacheTagsEvent\Shopware\Commercial\AISearch\NaturalLanguageSearch\Event\SearchTerm\SearchTermRouteCacheKeyEvent\Shopware\Commercial\AISearch\NaturalLanguageSearch\Event\SearchTerm\SearchTermRouteCacheTagsEvent\Shopware\Core\Checkout\Shipping\Event\ShippingMethodRouteCacheKeyEvent\Shopware\Core\Checkout\Shipping\Event\ShippingMethodRouteCacheTagsEvent\Shopware\Core\Content\Sitemap\Event\SitemapRouteCacheKeyEvent\Shopware\Core\Content\Sitemap\Event\SitemapRouteCacheTagsEvent
As part of optimizing theme configuration loading, several changes are being made to the theme system:
- The
\Shopware\Storefront\Theme\CachedResolvedConfigLoaderhas been removed. This class was previously used to cache theme configurations but has been replaced by a more efficient database-based solution using the newtheme_runtime_configtable. - The
\Shopware\Storefront\Theme\Exception\ThemeAssignmentExceptionhas been removed. Instead, use\Shopware\Storefront\Theme\Exception\ThemeException::themeAssignmentExceptionfor handling theme assignment errors. - The
\Shopware\Storefront\Theme\ThemeLifecycleServiceis now marked as final and cannot be extended. Additionally, itsrefreshThememethod now accepts an optional$configurationCollectionparameter.
The filterByActiveRules methods in Shopware\Core\Checkout\Payment\PaymentMethodCollection and Shopware\Core\Checkout\Shipping\ShippingMethodCollection were removed.
Use the new Shopware\Core\Framework\Rule\RuleIdMatcher instead.
It allows filtering of RuleIdAware objects in either arrays or collections.
Currently, there are multiple order deliveries and multiple order transactions per order. If only one, the "primary", order delivery and order transaction is displayed and used in the administration, there is now an easy way in version 6.8 using the primaryOrderDelivery and primaryOrderTransaction. All existing orders will be updated with a migration so that they also have the primary values.
From now on, the OrderTransactionStatusRule::match will always use the primaryOrderTransaction instead of the most recently successful transaction.
Get the first order delivery with primaryOrderDelivery so you should replace methods like deliveries.first() or deliveries[0]
Get the latest order transaction with primaryOrderTransaction so you should replace methods like transaction.last()
In the default Shopware setup the sw-cache-hash cookie will only contain rule ids which are used to alter product prices, in contrast to previous all active rules, which might only be used for a promotion.
If the Storefront content changes depending on a rule, the corresponding rule ids should be added using the extension Shopware\Core\Framework\Adapter\Cache\Http\Extension\ResolveCacheRelevantRuleIdsExtension. In the extension it is either possible to add specific rule ids directly or add them to the ResolveCacheRelevantRuleIdsExtension::ruleAreas array directly, i.e.
class ResolveRuleIds implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ResolveCacheRelevantRuleIdsExtension::NAME . '.pre' => 'onResolveRuleAreas',
];
}
public function onResolveRuleAreas(ResolveCacheRelevantRuleIdsExtension $extension): void
{
$extension->ruleAreas[] = RuleExtension::MY_CUSTOM_RULE_AREA;
}
}If some custom entity has a relation to a rule, which might alter the storefront, you should add them to either an existing area, or your own are using the DAL flag Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\RuleAreas on the rule association.
The constants Shopware\Core\Framework\DataAbstractionLayer\Field\Flag\RuleAreas::{CATEGORY_AREA,LANDING_PAGE_AREA} are not used anymore and will therefore be removed
- For example media files with spaces in their name now should be properly URL-encoded with
%20by default, without doing URL-encoding only with the return value of theMediaUrlGenerator. Make sure to remove extra URL-encoding (e.g. usage of twig filterencodeUrl) on media entities to not accidentally double encode the URLs. - Changed twig filter
encodeMediaUrlinStorefront/Framework/Twig/Extension/UrlEncodingTwigFilter.phpwill now return the URL in its already encoded form and is basically the same as$media->getUrl()with some extra checks.
The \Shopware\Core\System\SalesChannel\Context\BaseSalesChannelContextFactory now uses the language repository directly to fetch language information.
As a consequence the query with the title base-context-factory::sales-channel no longer adds the languages association,
which means the salesChannel property of the BaseSalesChannelContext no longer contains the current language object.
Details
You should update your code to reference the new classes:
Shopware\Core\Framework\Notification\NotificationCollectionShopware\Core\Framework\Notification\NotificationDefinitionShopware\Core\Framework\Notification\NotificationEntity
The old classes are removed:
Shopware\Administration\Notification\NotificationCollectionShopware\Administration\Notification\NotificationDefinitionShopware\Administration\Notification\NotificationEntity
\Shopware\Administration\Controller\NotificationController has been moved to core: \Shopware\Core\Framework\Notification\Api\NotificationController - if you type hint on this class, please refactor, it is now internal.
The HTTP route is still the same. The old class has been removed.
The following snippet keys have been removed:
global.sw-condition.condition.cartTaxDisplayglobal.sw-condition.condition.lineItemOfTypeRuleglobal.sw-condition.condition.promotionCodeOfTypeRuleglobal.sw-condition.condition.dayOfWeekRule
Details
We removed properties label and helpText properties of theme.json, which were deprecated in 6.7, to use the snippet system of the administration instead.
A constructed snippet key was introduced in Shopware 6.7 and will now be required.
This affects label and helpText properties in the theme.json, which are used in the theme manager.
The snippet keys to be used are constructed as follows.
The mentioned themeName implies the technicalName property of the theme, or its respective parent theme name, since snippets are inherited from the parent theme as well.
Also, please notice that unnamed tabs, blocks or sections will be accessible via default.
Examples:
- Tab:
sw-theme.<technicalName>.<tabName>.label- e.g.:
sw-theme.swag-shape-theme.colorTab.label
- e.g.:
- Block:
sw-theme.<technicalName>.<tabName>.<blockName>.label- e.g.:
sw-theme.swag-shape-theme.colorTab.primaryColorsBlock.label
- e.g.:
- Section:
sw-theme.<technicalName>.<tabName>.<blockName>.<sectionName>.label- e.g.:
sw-theme.swag-shape-theme.colorTab.primaryColorsBlock.homeSection.label
- e.g.:
- Field:
sw-theme.<technicalName>.<tabName>.<blockName>.<sectionName>.<fieldName>.label- e.g.:
sw-theme.swag-shape-theme.colorTab.primaryColorsBlock.homeSection.sw-color-primary-dark.label
- e.g.:
sw-theme.<technicalName>.<tabName>.<blockName>.<sectionName>.<fieldName>.helpText- e.g.:
sw-theme.swag-shape-theme.colorTab.primaryColorsBlock.homeSection.sw-color-primary-dark.helpText
- e.g.:
- Options:
sw-theme.<technicalName>.<tabName>.<blockName>.<sectionName>.<fieldName>.<index>.label- e.g.:
sw-theme.swag-shape-theme.colorTab.primaryColorsBlock.homeSection.sw-color-primary-dark.0.label
- e.g.:
Both deprecated fields label & helpText of Shopware\Storefront\Theme\ThemeEntity are removed. Please use the snippet keys to be found in \Shopware\Storefront\Theme\ThemeService::getThemeConfigurationStructuredFields instead.
The ThemeService::getThemeConfiguration and ThemeService::getThemeConfigurationStructuredFields methods have been removed. Use the new ThemeConfigurationService::getPlainThemeConfiguration and ThemeConfigurationService::getThemeConfigurationFieldStructure methods instead. The new methods return the same data as the old ones, excluding the deprecated fields.
The category_url and category_linknewtab twig functions have been removed. The data is now directly available in the category entities, therefore use category.seoUrl or category.shouldOpenInNewTab instead.
<a class="link"
- href="{{ category_url(item) }}"
+ href="{{ item.seoUrl }}"
- {% if category_linknewtab(item) %}target="_blank"{% endif %}
+ {% if item.shouldOpenInNewTab %}target="_blank"{% endif %}
</a>The Twig breadcrumb functions sw_breadcrumb_full and sw_breadcrumb_full_by_id now require the SalesChannelContext, i.e.
- sw_breadcrumb_full(category, context.context)
- sw_breadcrumb_full_by_id(category, context.context)
+ sw_breadcrumb_full(category, context)
+ sw_breadcrumb_full_by_id(category, context)The \Shopware\Storefront\Theme\Message\DeleteThemeFilesMessage and its handler \Shopware\Storefront\Theme\Message\DeleteThemeFilesHandler are removed.
Unused theme files are deleted by using the \Shopware\Storefront\Theme\ScheduledTask\DeleteThemeFilesTask scheduled task.
Details
Return values over the return keyword from usual twig macro functions are not supported anymore.
Use the sw_macro_function instead, which is available since v6.6.10.0.
// Resources/scripts/include/media-repository.twig
- {% macro getById(mediaId) %}
+ {% sw_macro_function getById(mediaId) %}
{% set criteria = {
'ids': [ mediaId ]
} %}
{% return services.repository.search('media', criteria).first %}
- {% endmacro %}
+ {% end_sw_macro_function %}
// Resources/scripts/cart/first-cart-script.twig
{% import "include/media-repository.twig" as mediaRepository %}
{% set mediaEntity = mediaRepository.getById(myMediaId) %}The CountryStateController route /country/country-state-data now supports only GET methods. This change improves compatibility with HTTP caching and aligns with the best practices for data retrieval routes.
Details
With 6.7 the Store-API caching layer was removed, therefore the configuration for it is not needed anymore and has been removed. Concretely this means the following configuration options are removed:
shopware.cache.invalidation.product_listing_routeshopware.cache.invalidation.product_detail_routeshopware.cache.invalidation.product_review_routeshopware.cache.invalidation.product_search_routeshopware.cache.invalidation.product_suggest_routeshopware.cache.invalidation.product_cross_selling_routeshopware.cache.invalidation.payment_method_routeshopware.cache.invalidation.shipping_method_routeshopware.cache.invalidation.navigation_routeshopware.cache.invalidation.category_routeshopware.cache.invalidation.landing_page_routeshopware.cache.invalidation.language_routeshopware.cache.invalidation.currency_routeshopware.cache.invalidation.country_routeshopware.cache.invalidation.country_state_routeshopware.cache.invalidation.salutation_routeshopware.cache.invalidation.sitemap_route