setono / sylius-redirect-plugin
Sylius plugin for managing redirects
Fund package maintenance!
Setono
Installs: 321 994
Dependents: 0
Suggesters: 0
Security: 0
Stars: 26
Watchers: 2
Forks: 27
Open Issues: 17
Type:sylius-plugin
pkg:composer/setono/sylius-redirect-plugin
Requires
- php: >=7.4
- doctrine/collections: ^1.6
- doctrine/orm: ^2.7
- doctrine/persistence: ^1.3 || ^2.1 || ^3.0
- league/uri: ^6.0 || ^7.5
- league/uri-components: ^2.3 || ^7.5
- psr/log: ^1.1 || ^2.0 || ^3.0
- sylius/channel: ^1.0
- sylius/channel-bundle: ^1.0
- sylius/core-bundle: ^1.0
- sylius/product-bundle: ^1.0
- sylius/resource-bundle: ^1.6
- sylius/taxonomy-bundle: ^1.0
- sylius/ui-bundle: ^1.0
- symfony/config: ^5.4 || ^6.0
- symfony/console: ^5.4 || ^6.0
- symfony/dependency-injection: ^5.4 || ^6.0
- symfony/event-dispatcher: ^5.4 || ^6.0
- symfony/form: ^5.4 || ^6.0
- symfony/http-foundation: ^5.4 || ^6.0
- symfony/http-kernel: ^5.4 || ^6.0
- symfony/routing: ^5.4 || ^6.0
- symfony/validator: ^5.4 || ^6.0
- webmozart/assert: ^1.11
Requires (Dev)
- api-platform/core: ^2.7
- lexik/jwt-authentication-bundle: ^2.16
- php-http/message-factory: ^1.1
- phpspec/phpspec: ^7.3
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.6
- psalm/plugin-phpunit: ^0.18
- psalm/plugin-symfony: ^5.0
- setono/code-quality-pack: ^2.9
- setono/sylius-behat-pack: ^0.2
- shipmonk/composer-dependency-analyser: ^1.8
- sylius/sylius: ~1.10.14
- symfony/debug-bundle: ^5.4 || ^6.0
- symfony/dotenv: ^5.4 || ^6.0
- symfony/intl: ^5.4 || ^6.0
- symfony/web-profiler-bundle: ^5.4 || ^6.0
- symfony/webpack-encore-bundle: ^1.16
README
Gives you the ability to manage redirects in your Sylius shop.
Installation
Step 1: Download the plugin
Open a command console, enter your project directory and execute the following command to download the latest stable version of this plugin:
$ composer require setono/sylius-redirect-plugin
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Step 2: Enable the plugin
Then, enable the plugin by adding it to the list of registered plugins/bundles
in the config/bundles.php file of your project:
<?php return [ // ... // Add before SyliusGridBundle Setono\SyliusRedirectPlugin\SetonoSyliusRedirectPlugin::class => ['all' => true], Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true], // ... ];
It is IMPORTANT to add the plugin before the grid bundle else you will get a an exception saying You have requested a non-existent parameter "setono_sylius_redirect.model.redirect.class".
Step 3: Add configuration
# config/routes/setono_sylius_redirect.yaml setono_sylius_redirect_admin: resource: "@SetonoSyliusRedirectPlugin/Resources/config/admin_routing.yaml" prefix: /%sylius_admin.path_name%
# config/packages/setono_sylius_redirect.yaml imports: # ... - { resource: "@SetonoSyliusRedirectPlugin/Resources/config/app/config.yaml" } # ...
Step 4: Update database
Use Doctrine migrations to create a migration file and update the database.
$ bin/console doctrine:migrations:diff $ bin/console doctrine:migrations:migrate
Step 5: Copy template
You can copy the templates under tests/Application/templates/bundles/SyliusAdminBundle into your own application to enable the possibility to add an automatic redirection when updating product
Step 6: Install assets
$ bin/console assets:install
What it does
This plugin allows you to create new redirects.
Under the new menu entry Redirects unders Configuration, you can manage redirects.
Redirection entry
An entry is composed by:
- Source url, relative to your website
- Target URL, can be relative or absolute in case you want to redirect to another website
- Permanent or Temporary (This impact the HTTP response code of the redirection, 301 or 302)
- Enabled
- Redirect only if 404 (to manage potentially dead links)
Security
There is a built-in security when creating/modifying redirection that prevent creating an infinite loop. This work with infinite recursive checking.
A second security is to prevent same source redirection leading to inconstant redirect.
Automatic redirect
There is a built-in feature that allows you to automatically create a redirection when changing a product slug. It also handles the case where it would create an infinite loop and remove the unnecessary redirect.
Example: Having a slug like /products/a, renaming it to /products/b then renaming it to /products/a will result in a redirect from b to a and will automatically delete the one from a to b.