setono / sylius-redirect-plugin
Sylius plugin for managing redirects
Fund package maintenance!
Setono
Installs: 243 237
Dependents: 0
Suggesters: 0
Security: 0
Stars: 22
Watchers: 3
Forks: 24
Open Issues: 16
Type:sylius-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
- league/uri-components: ^2.3
- 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.4
- setono/sylius-behat-pack: ^0.2
- 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
.