gepur-it/erp-task-bundle
Gepur IT ERP Task Bundle is a PHP/Symfony package offering reusable task-management components for ERP applications. It provides task entities, services, and integration hooks to help developers organize, assign, and track business tasks within enterprise workflows. Suitable for extending existing E...
gepur-it/erp-task-bundle is a Symfony bundle, not a Laravel package. That distinction still drives everything: it ships a DependencyInjection/ extension, Doctrine entity mappings, Twig-facing controllers, and Resources/config/*.yaml — none of which Laravel auto-discovers. With 1 star, 0 dependents, and a repo that went quiet after 2021-04-12 until v7.0.0, treat it as a reference implementation or vendored starting point, not a dependency you can composer require into a modern Laravel app.
What v7.0.0 ("update to php 8 and fixed tests") changes for evaluation:
php: ^7.4 || ^8.0; v7.0.0 almost certainly requires ^8.0 (or ^8.1). That is the good news — PHP 8.1/8.2/8.3 no longer trips the platform check on PHP alone.symfony/* constraints may still be 4.4/5.x, which is what actually conflicts with Laravel 10/11 (symfony/console ^6, symfony/http-foundation ^6). PHP 8 support ≠ Symfony 6 support. Verify before assuming a Laravel 11 install will resolve.Minimal evaluation steps:
composer.json first. Confirm the new php constraint and, critically, whether symfony/framework-bundle moved to ^6 or stayed on ^4.4 || ^5.0. If it stayed, Laravel 10/11 composer require still fails and that's the reason, not your environment. If it moved to ^6, Pattern A below becomes viable in a modern Symfony host — a genuine change from the previous assessment.README.md → DependencyInjection/*Extension.php (what services/config the bundle registers) → Resources/config/routing.yaml and services.yaml → Entity/ (the actual domain model) → Controller/ → tests/ (new/updated in v7.0.0). The entities remain the most portable artifact.First use case: an internal ERP backoffice task board — create/list/assign tasks, track status and priority, link tasks to ERP records (orders, customers, invoices). Clone the entity shape and route structure, then rebuild it natively in Laravel. That is the fastest path to day-one value.
Pattern A — Evaluate/run inside a Symfony host (now more plausible).
// config/bundles.php
return [
// ...
GepurIt\ErpTaskBundle\ErpTaskBundle::class => ['all' => true],
];
# config/routes.yaml
erp_task:
resource: '@ErpTaskBundle/Resources/config/routing.yaml'
Then bin/console debug:container --tag=... and bin/console debug:router to confirm what the extension actually registered. Run doctrine:schema:validate before any migration — bundles of this vintage often assume existing tables. On PHP 8.2+ watch for dynamic-property and ${var} string-interpolation deprecations in the bundle source; v7.0.0 claims PHP 8 support, so run the bundled test suite on your target PHP version to confirm it actually holds.
Pattern B — Port the domain model to Laravel (the realistic path).
Map the Symfony artifacts directly:
| Bundle artifact | Laravel equivalent |
|---|---|
Doctrine Entity/Task.php |
App\Models\Task (Eloquent) |
Repository/TaskRepository.php |
Query scopes / custom repository class |
Form/TaskType.php |
StoreTaskRequest / UpdateTaskRequest |
Controller/*Controller.php |
TaskController (resource) |
Resources/config/routing.yaml |
routes/web.php |
DependencyInjection/*Extension.php |
TaskServiceProvider |
| Twig templates | Blade views |
// database/migrations/xxxx_create_tasks_table.php
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable();
$table->string('status')->default('open'); // mirror bundle's status enum
$table->string('priority')->default('normal');
$table->foreignId('assignee_id')->nullable()->constrained('users');
$table->nullableMorphs('taskable'); // link to orders/customers
$table->timestamps();
});
// app/Providers/TaskServiceProvider.php
public function register(): void
{
$this->app->bind(TaskManager::class, fn ($app) =>
new TaskManager($app->make(TaskRepository::class))
);
}
Pattern C — Workflow/state integration. Keep status transitions explicit rather than free-form strings. The bundle likely encodes a status list; lift it into an enum or a small state machine and gate transitions in a policy. v7.0.0 adds no new domain concepts, so whatever you lifted from the pre-7 model still holds.
enum TaskStatus: string { case Open = 'open'; case InProgress = 'in_progress'; case Done = 'done'; }
Integration tips: keep assignment and priority as config-backed enums so the bundle's vocabulary survives the port; wrap task creation in a service class (TaskManager) so controllers stay thin and the logic is unit-testable independent of HTTP.
symfony/* constraints specifically. If they remain 4.4/5.x, Laravel 10/11 composer require still fails. Resolve by forking into a private packages/ repo or copying the entity code — never with --ignore-platform-reqs.extra.laravel.providers — you will get a "class not found / not booting" surprise if you assume the package registers itself. This is unchanged by v7.0.0.EntityManager, lazy proxies, and flush() have no Eloquent equivalents. Budget real time for this; the port is mechanical but not trivial.Resources/ and Migrations/ for table names; verify against a clean DB before running anything against shared data.config/bundles.php; missing entry means services silently don't exist → "service not found" at resolve time, not boot time.bin/console debug:container <id>, debug:router, debug:event-dispatcher. For the Laravel port, log transitions in TaskManager — most bugs are state-machine bugs, not persistence bugs.DependencyInjection compiler passes and event subscribers are the cleanest hooks for customizing behavior without editing the bundle source.How can I help you explore Laravel packages today?