mattrogowski
Well-known member
- Affected version
- 2.2.6 PL2
Just sunk a chunk of time debugging an issue with an importer where the key from the
Looking at
If
I don't know if an exception can be thrown at any point here, or maybe from within
The first
Essentially, it's not super clear from the CLI error that it's failing as it has no current state set inside
getSteps array was comments but the associated method was called stepPosts instead of stepComments, and it threw this error on the CLI:
Code:
Argument 3 passed to XF\Cli\Command\Import::XF\Cli\Command\{closure}() must be an instance of XF\Import\StepState, null given, called in /home/staging/public_html/community/src/XF/Import/Runner.php on line 171
Looking at
XF\Import\Runner:
Code:
protected function triggerOnTick(\Closure $onTick, $step = null, StepState $stepState = null)
{
if ($step === null)
{
$step = $this->session->currentStep;
}
if ($stepState === null)
{
$stepState = $this->session->currentState;
}
$onTick($this->session->runComplete, $step, $stepState, $this->getImportCompletionDetails(), $this);
}
If
$stepState is still null, it still gets passed through to the $onTick callback, which then throws the above error.I don't know if an exception can be thrown at any point here, or maybe from within
setupRunnableStep:
Code:
if (is_callable([$this->importer, $runMethod]))
{
$state = new StepState();
$state->startDate = time();
$state->title = $this->getStepTitle($step);
$stepSetupMethod = 'setupStep' . $step;
if (is_callable([$this->importer, $stepSetupMethod]))
{
$stepConfig = $this->importer->getStepSpecificConfig(
$step,
$this->session->stepConfig
);
$this->importer->$stepSetupMethod($stepConfig);
}
$stepEndMethod = 'getStepEnd' . $step;
if (is_callable([$this->importer, $stepEndMethod]))
{
$state->end = $this->importer->$stepEndMethod();
}
$session->currentStep = $step;
$session->currentState = $state;
return;
}
The first
is_callable check fails so it never sets $session->currentState so then just fails when it gets to triggerOnTickEssentially, it's not super clear from the CLI error that it's failing as it has no current state set inside
setupRunnableStep, due to the method name not being callable because it's named incorrectly. It looks like a higher level application issue and not something caused by a misspelt method name. Some sort of hint that, in this instance, method stepComments is not callable would have flagged the issue immediately as I'd have realised it was called stepPosts straight away instead of after... much longer
Last edited: