Skip to content

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

  1. 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';
    }
}
  1. 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.

by Odiseo