Add demoentityimporter module (custom importer for the 9.2 import engine) - #256
Draft
jolelievre wants to merge 4 commits into
Draft
Add demoentityimporter module (custom importer for the 9.2 import engine)#256jolelievre wants to merge 4 commits into
jolelievre wants to merge 4 commits into
Conversation
Shows how a module registers its own entity importer into the PrestaShop 9.2 core import engine: an autoconfigured service implementing EntityImporterInterface is enough, the core tags and collects it into the EntityImporterRegistry (entity dropdown, mapping screen and batch execution pick it up automatically). Companion example for PrestaShop/PrestaShop#42247 (#41907 import engine).
jolelievre
force-pushed
the
demoentityimporter-module
branch
from
August 6, 2026 13:22
25486fb to
f7bd7d2
Compare
The module was an empty registration shell; it now demonstrates the full integration story with the core import engine: - DemoNote Doctrine entity in src/Entity (auto-mapped by the core for active modules), backing table created at module install - DemoNoteImporter extends the new AbstractEntityImporter base (cursor- resumable batch loop, phase-id guard, default unit count) and follows the updated engine contract (getLabel(), string phase ids, plain array records, skip rows consumed at normalization) - validation phase (note required, max 255 chars) and database phase persisting one DemoNote per row (create, or update by mapped id) - sample CSV and README walkthrough
jolelievre
force-pushed
the
demoentityimporter-module
branch
from
August 7, 2026 07:03
f7bd7d2 to
bf63cdd
Compare
Match the core import engine convention: no final classes, protected members instead of private, so other modules can extend or decorate importers.
The core import engine moved on since this module was written. It still compiles and is still discovered (debug:container --tag=core.import.entity_importer lists DemoNoteImporter next to ProductImporter), because it returns iterateBatch() rather than building a PhaseBatchResult itself - but two things were stale: - the "note" field was flagged required through EntityField's 4th argument. That flag is deprecated in 9.3: it never enforced anything server-side, and requiredness is now validated PER ROW, because a value is only mandatory when the row CREATES an entity and one file can create and update. An example module should not showcase a deprecated API, so the flag is gone and a comment explains where the check actually lives (the validation phase already does it). - the version floor said 9.2, while the engine ships in 9.3. Also documents the one API tightening a module author can actually trip over: PhaseBatchResult now requires all four arguments, and a batch that consumed nothing must hand back the cursor it was given. Returning a fresh result without it rewinds the reader to the start of the file while the phase offset stays put, re-importing rows under the wrong indexes. This module never hits that, since it returns iterateBatch(), but importers implementing EntityImporterInterface directly - which the docblock presents as a supported option - would.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
New example module showing how a module plugs its own entity importer into the core import engine introduced by the #41907 refactoring:
PrestaShop\PrestaShop\Core\Import\Engine\EntityImporterInterfaceautoconfigure: true— the core tags it automatically (core.import.entity_importer) and collects it into theEntityImporterRegistry, no manual tag neededVerification after installing the module:
Related