grossum/core-bundle
Grossum CoreBundle packages shared core functionality for Grossum PHP applications, bundling common services, utilities, and base classes so teams avoid duplicating infrastructure. Install via Composer and build on its reusable components to speed up development across projects.
This is a Symfony bundle, not a Composer package for Laravel. Before doing anything else, confirm your app is actually a Symfony app on a 2.8 / 3.x-era kernel — a 2016 bundle with zero tagged releases past December 2016 and no dependents is almost certainly pinned to symfony/symfony ^2.8|^3.0, Doctrine ORM 2.4/2.5, and PHP 5.6/7.0. From a Laravel mindset, the closest mental model is a "shared domain primitives" package you require into several first-party apps, except the wiring is a bundle + DI container instead of a service provider.
Minimal path:
composer require grossum/core-bundle — expect this to fail or resolve oddly because there is no stable tag. Plan on "grossum/core-bundle": "dev-master" with an explicit commit hash, and be ready to fork.app/AppKernel.php:
new Grossum\CoreBundle\GrossumCoreBundle(),
Verify the actual class name and namespace from the repo root — do not trust the convention, this bundle predates strict PSR-4 enforcement in many shops.DependencyInjection/Configuration.php first. That single file is your entire config contract; the README (if one exists) is unreliable at this age. Every ->scalarNode() / ->arrayNode() there is a key you can set under grossum_core: in config.yml.Resources/config/services.yml (or services.xml). This tells you what the bundle actually gives you — base entities, repository helpers, paginators, form types, Twig extensions, Doctrine subscribers.MappedSuperclass or an abstract CRUD controller) and extend it in one entity or controller. Do not adopt the whole bundle at once.If you are on Laravel and evaluating this as a port source: don't install it. Read it for its base-entity/paginator/repository abstractions and reimplement them as a Laravel package with a ServiceProvider. Nothing here is Coupling-safe to bring over.
Extend, don't call. Core bundles of this vintage are almost always inheritance-based: abstract entities, abstract controllers, traits for timestamps and blameable fields. Wire it the same way Symfony devs did in 2016 — class Article extends BaseArticle — and keep your own logic in the child so a fork-and-patch of the vendor code stays viable.
Fork-and-vendor is the default pattern. With no maintainer activity since 2016, treat the upstream as a source tree, not a dependency. Commit a fork under your VCS namespace:
"repositories": [{"type": "vcs", "url": "[email protected]:you/core-bundle-fork.git"}],
"require": {"grossum/core-bundle": "dev-master"}
Then patch freely. This is the only sustainable pattern.
Map bundle constructs to Laravel analogues if you're porting concepts:
| Bundle artifact | Laravel equivalent |
|---|---|
| Bundle class + DI extension | ServiceProvider::register() / boot() |
Configuration.php tree |
config/core.php + mergeConfigFrom |
Abstract entity / MappedSuperclass |
Trait on Eloquent model (HasTimestamps, Blameable) |
| Repository helper | Query scope / custom Builder macro |
| Abstract CRUD controller | Base controller or invokable action class |
| Event subscriber | Listener in EventServiceProvider |
Integration tips. Register the bundle late in AppKernel so its Doctrine subscribers see a compiled mapping first. If it ships a paginator, keep pagination concerns at the controller boundary — do not let a vendor paginator object leak into your domain layer, because you will replace it. If it ships form types, prefer overriding via form.type_extension tags over editing the bundle.
Workflow. Enable the bundle in a scratch project first, dump the container (debug:container), and inventory every service it registers. That inventory, not the docs, is your adoption checklist — you'll typically find 20% of the services carry 80% of the value.
dev-master; always pin a commit SHA ("dev-master#abc1234"). This is not optional.$container->getDefinition() APIs, ResourceInterface paths, and service ids that changed in Symfony 3.3+/4.0. Expect deprecation floods on 3.4 and hard breaks on 4.x. Run bin/console debug:container --deprecations after wiring.@ORM\ annotations and MappedSuperclass will fight with newer Doctrine (attribute driver, doctrine/orm 2.10+ deprecating annotations). Mapping inheritance also means schema migrations now depend on vendor code — a vendor field addition becomes your migration.Grossum\CoreBundle\Entity\Base with non-matching directory case) break on case-sensitive filesystems and only on Linux/CI. If it works locally on macOS and fails in CI, look here first.container:debug for services, debug:config grossum_core to see the resolved tree, debug:event-dispatcher to catch subscribers the bundle registered silently. Silent subscribers (e.g. soft-delete filters, blameable listeners) cause "why did this row change?" mysteries — check doctrine.event_subscriber tags before blaming your own code.form.type_extension, kernel.event_listener, doctrine.event_subscriber, and compiler passes in your own bundle. Anything you override by editing vendor files will be lost on the next composer update.src/ and drop the dependency — this is usually cheaper than maintaining the fork.How can I help you explore Laravel packages today?