friendsofvictoire/card-widget
A lightweight Laravel package from FriendsofVictoire that provides a reusable card widget for consistent list cards and search results. It offers Blade-friendly rendering and customizable presentation for titles, descriptions, and metadata, helping you display structured content without duplicating...
Before anything else: this is not a Laravel package. friendsofvictoire/card-widget (repository name WidgetCardBundle) is a Symfony bundle that registers a "Card" content widget inside Victoire DCMS, a Symfony-based CMS. There is no service provider, no facade, no config file Laravel can load, and no view namespace Laravel can resolve. composer require friendsofvictoire/card-widget in a laravel new project will either fail on Symfony 2/3 constraints or install a bundle that nothing autoloads.
So "getting started" splits into two paths:
Path A — you are actually working in a legacy Victoire/Symfony site.
composer.json constraints before assuming it will install.composer require friendsofvictoire/card-widget and register FriendsOfVictoire\Bundle\WidgetCardBundle\WidgetCardBundle in AppKernel.php.Widget/, the Twig template under Resources/views/, and the form type under Form/ — those three files are 90% of the bundle.Path B — you are a Laravel developer evaluating this for a Laravel project. Skip it. The feature it provides is "a card with an image, heading, body, and link that an editor can drop onto a page." In Laravel that is a Blade component:
// app/View/Components/Card.php
class Card extends Component {
public function __construct(
public ?string $image = null,
public ?string $title = null,
public ?string $url = null,
) {}
}
{{-- resources/views/components/card.blade.php --}}
<article class="card">
@if($image)<img src="{{ $image }}" alt="">@endif
<h3>{{ $title }}</h3>
<div>{{ $slot }}</div>
@if($url)<a href="{{ $url }}">Read more</a>@endif
</article>
That is the entire "package." You will write it in ten minutes and own it forever, on a supported stack.
If maintaining the Victoire bundle:
VictoireWidget interface is missing — check Resources/config/services.yml first.Resources/views/*.html.twig into your app's template path (app/Resources/WidgetCardBundle/views/ for Symfony 2/3). Never edit vendor files; the bundle is unmaintained.The Laravel patterns that actually replace this package:
blocks table with type, sort_order, and a payload JSON column; a BlockRenderer service that maps type => view; a Filament/Nova field for the payload. Cards become one type among many (hero, text, quote, CTA).cards table with a cardable polymorphic relation to Page/Post. Better if cards are reused across pages or need their own URLs and media.pages — pages.content cast to array, rendered with a @foreach and a match on block type. Fastest to ship, worst to query against later.wire:model on a blocks array, or a Filament Repeater on the JSON column. This is where 80% of the effort goes, not in the markup.Integration tips:
variant prop and a match in the component, rather than three separate components. The bundle does not support variants; you'll want them.composer require into a Laravel app is wrong. The bundle's composer.json requires Symfony components and Victoire core; Laravel's container does not know about Symfony bundle registration (AppKernel, getContainerExtension, service tags).--ignore-platform-reqs or pin unrelated packages backward to get it in. The time spent resolving conflicts dwarfs the time to write a Blade component.debug:container --tag=victoire.widget (tag name may vary by Victoire version) to confirm the widget is registered. If it renders blank, the Twig template path override is usually the culprit.composer.lock.How can I help you explore Laravel packages today?