octobercms/october · error · SystemException
Could not spawn from path [{$spawnPath}]
Error message
Could not spawn from path [{$spawnPath}] What it means
Thrown by RepeaterItem::extendWithBlueprintSpawn(string $spawnPath) when spawnFromPath() fails to reconstruct the model chain from the stored spawn path. The path format is ClassName@blueprintUuid[:group].field[:group]...; it returns null when the path lacks '@', the class does not exist, a path segment has an empty field name, or makeRelation() cannot resolve a relation. The caller then throws a SystemException naming the offending path.
Source
Thrown at modules/tailor/models/RepeaterItem.php:318
if ($this->multisiteEnabled) {
foreach ($this->propagatable as $name) {
if ($this->getRelationType($name)) {
$this->defineMultisiteRelation($name);
}
}
}
}
/**
* extendWithBlueprintSpawn attempts to load from a respawned model, then copies the fieldset
* definition across before extending the model.
*/
public function extendWithBlueprintSpawn(string $spawnPath)
{
$model = $this->spawnFromPath($spawnPath);
if (!$model) {
throw new SystemException("Could not spawn from path [{$spawnPath}]");
}
$this->setFieldsetDefinition($model->getTable(), $model->fieldsetConfig, $model->useFieldsetGroups);
if ($model->useFieldsetGroups) {
$this->content_group = $model->content_group;
}
$this->extendWithBlueprint();
}
/**
* setBlueprintFieldConfig
*/
public function setBlueprintFieldConfig($parentModel, string $tableName, string $fieldName, array $fieldConfig, bool $useGroups)
{
$this->host_field = $fieldName;
$this->setRelation('host', $parentModel);View on GitHub (pinned to b608633a7e)
Solutions
- Inspect the stored value: query the repeater items table (content_spawn_path column) for the failing rows and compare the class name and field segments against current code
- If the parent class was renamed, update the stored spawn paths to the new fully qualified class name (or write a one-off migration)
- If a repeater field was renamed in the blueprint, either restore the old field name or rewrite affected spawn path segments to the new field name
- Delete orphaned repeater item rows whose parent records no longer exist, then rebuild content
Example fix
// before: rows still reference the old plugin namespace
// content_spawn_path = "OldVendor\Blog\Models\Post@8f2c...:slides.slide"
// after: one-off migration updates the class prefix
use Winter\Storm\Database\Updater;
DB::table('tailor_repeater_items')
->where('content_spawn_path', 'like', 'OldVendor\\Blog\\%')
->update([
'content_spawn_path' => DB::raw("REPLACE(content_spawn_path, 'OldVendor\\\\Blog\\\\', 'RainLab\\\\Blog\\\\')")
]); Defensive patterns
Strategy: try-catch
Validate before calling
// Validate a spawn path before extending
function spawnPathResolvable(string $path): bool
{
if (strpos($path, '@') === false) {
return false;
}
[$class] = explode('@', $path, 2);
return class_exists($class);
} Try / catch
try {
$item->extendWithBlueprintSpawn($spawnPath);
} catch (\SystemException $e) {
\Log::warning('Skipping repeater item with bad spawn path', ['path' => $spawnPath]);
// skip/render fallback markup rather than failing the whole page
} Prevention
- Never rename repeater field names or owning model classes without a data migration for content_spawn_path
- Back up repeater item tables before restructuring blueprints
- When renaming a plugin namespace, include a migration that rewrites the class prefix in content_spawn_path
When it happens
Trigger: A repeater item row whose content_spawn_path column references a class that no longer exists (renamed/removed plugin or model), a malformed path string (missing '@', empty segment, bad dots/colons), or a path whose relation chain no longer matches the blueprint's field definitions after they were restructured.
Common situations: Uninstalling or renaming a plugin that owned the parent model while repeater item rows remain in the database; editing blueprints so a repeater field name changed, invalidating stored spawn paths for existing content; legacy data written by an older path format after an October CMS upgrade; manually imported rows with corrupted content_spawn_path values.
Related errors
- Repeater must specify either a "form" or "group" property fo
- The provided model class ":modelClass" for the recordfinder
- Section handle [{$handle}] not found
- Global handle [{$handle}] not found
- Missing section definition. Call EntryRecord::inSection() to
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/0c910368f75ee558.
Report an issue: GitHub.