endroid/guide-bundle
Endroid Guide Bundle is a Symfony package for adding guide functionality to your application. It offers a simple way to define, organize, and display structured guidance or help content for users, with lightweight integration.
This package ships with essentially no documentation — the README is a single heading — so treat the source as the spec. Before anything else, read composer.json to see the PHP constraint, the Symfony version it targets, and the autoload roots; that tells you within thirty seconds whether it is even installable in your app.
composer require endroid/guide-bundle in a scratch project first, not in your main application.src/, DependencyInjection/, Resources/config/ (or config/), and any tests/. A *Bundle.php class at the root is the confirmation that this is a Symfony bundle, not a Laravel package.vendor/bin/phpunit. Green tests are your only reliable description of intended behaviour.grep -rn "public function" src/ and grep -rn "tag(" src/ DependencyInjection/ to see which services are exposed and which are tagged for collection.The first realistic use case is a spike, not a feature: register the bundle in a throwaway Symfony config/bundles.php, boot a kernel, and confirm there is actually a service worth consuming. If the bundle only registers an event subscriber or a Twig namespace, that tells you whether porting the idea to Laravel is a 20-line job or a rewrite.
Because the repository is archived, empty-README, and has zero dependents, the sane pattern is read-and-reimplement, not composer require. Everything below assumes you are evaluating whether the behaviour is worth borrowing.
Port the concept, not the package. A Symfony bundle's value usually lives in two places: a service that holds logic, and a compiler pass or tag that wires it. Copy the service class into app/Support/ (or a small first-party package under packages/), replace constructor-injected Symfony services with Laravel equivalents (Illuminate\Contracts\Cache, Illuminate\Contracts\Events\Dispatcher, Illuminate\Contracts\Config\Repository), and drop the DependencyInjection/ directory entirely.
If you genuinely need to run the bundle as-is, bridge it rather than reimplement it. Create a Laravel service provider that instantiates the Symfony kernel services manually:
public function register(): void
{
$this->app->singleton(SomeGuideService::class, function ($app) {
return new SomeGuideService(
$app->make('config')->get('guide'),
);
});
}
This only works if the bundle's services have no hard dependency on Symfony\Component\HttpKernel\KernelInterface or the container itself — check the constructor signatures before committing.
Integration tips when consuming the behaviour:
routes/web.php plus an invokable controller.{% include %} graph is usually the most time-consuming part to port.Resources/public/ need php artisan vendor:publish in Laravel, whereas Symfony uses assets:install. If the bundle references assets by container path, rewrite them to public_path() / asset().DependencyInjection/Configuration.php. That file is the closest thing to documentation you will find — read it before guessing.Workflow pattern for a first real feature: wire one end-to-end path in a branch (config → service → controller → view), write a feature test that hits the route, and only then decide whether to keep the fork. Without an upstream maintainer, your test suite becomes the package's contract.
composer.json, point at a VCS repository you control, never at the abandoned original.config/*.php to publish, no php artisan surface. Attempting composer require into a Laravel app and expecting it to do anything is the classic mistake here.@internal. Assume any class you touch may change shape in a fork you have not yet made.cache:clear, not at request time. If you bridge it, use bin/console debug:container <service> and debug:router in a Symfony harness to see what the bundle actually registers before writing Laravel glue.getDefinition, addTag, and Extension::load. Those three call sites describe 90% of what a bundle does. Start there rather than reading files alphabetically.kernel.* events. Those do not exist in Laravel; expect the extension story to be "fork it."src/; if the idea is good, spend two hours reimplementing it in Laravel and delete the dependency. Do not put this in a production composer.json.How can I help you explore Laravel packages today?