Appearance
Onboarding steps
An approved vendor only becomes live once every required onboarding step is complete. The core ships three required steps — store profile, payout method, billing address — via an extensible step registry. You can add your own (KYC, shipping setup, tax details, …) without touching the core.
The contract
php
namespace Odiseo\SyliusMarketplacePlugin\Onboarding;
interface OnboardingStepInterface
{
public function getCode(): string;
public function getPosition(): int;
public function isRequired(): bool;
public function isComplete(VendorInterface $vendor): bool;
public function getTranslationKey(): string;
/**
* Route name of the existing screen where the vendor completes this step, or null if the
* step has no single screen to link to.
*/
public function getRoute(): ?string;
}Steps are ordered by getPosition() (ascending). The core's own steps sit at 10 (store profile), 20 (payout method) and 30 (billing address), so pick a position relative to those.
Adding a step
- Implement the interface
php
<?php
// src/Onboarding/Step/KycOnboardingStep.php
declare(strict_types=1);
namespace App\Onboarding\Step;
use Odiseo\SyliusMarketplacePlugin\Entity\VendorInterface;
use Odiseo\SyliusMarketplacePlugin\Onboarding\OnboardingStepInterface;
final class KycOnboardingStep implements OnboardingStepInterface
{
public function getCode(): string
{
return 'kyc';
}
public function getPosition(): int
{
return 40;
}
public function isRequired(): bool
{
return true;
}
public function isComplete(VendorInterface $vendor): bool
{
// ...
}
public function getTranslationKey(): string
{
return 'app.onboarding.step.kyc';
}
public function getRoute(): ?string
{
return 'app_seller_kyc';
}
}- Tag the service
yaml
# config/services.yaml
services:
App\Onboarding\Step\KycOnboardingStep:
tags:
- { name: odiseo_marketplace.onboarding_step }The step immediately shows up in the seller panel's /onboarding wizard and, being required, blocks the vendor from being live until it reports isComplete() === true.