firefly-iii/firefly-iii · error · FireflyException

Could not render report view.

Error message

Could not render report view.

What it means

The Standard month report generator renders reports.default.month inside a try/catch; any Throwable while rendering is logged as 'Cannot render reports.default.month' and wrapped as a FireflyException whose message is fixed: 'Could not render report view.' (this variant, unlike the others, does not append the original error — getPrevious() carries it).

Source

Thrown at app/Generator/Report/Standard/MonthReportGenerator.php:68

     * @throws FireflyException
     */
    public function generate(): string
    {
        $accountIds = implode(',', $this->accounts->pluck('id')->toArray());
        $reportType = 'default';

        try {
            return view('reports.default.month', ['accountIds' => $accountIds, 'reportType' => $reportType])
                ->with('start', $this->start)
                ->with('end', $this->end)
                ->render()
            ;
        } catch (Throwable $e) {
            Log::error(sprintf('Cannot render reports.default.month: %s', $e->getMessage()));
            Log::error($e->getTraceAsString());
            $result = 'Could not render report view.';

            throw new FireflyException($result, 0, $e);
        }
    }

    /**
     * Sets the accounts involved in the report.
     */
    public function setAccounts(Collection $accounts): ReportGeneratorInterface
    {
        $this->accounts = $accounts;

        return $this;
    }

    /**
     * Unused budget setter.
     */
    public function setBudgets(Collection $budgets): ReportGeneratorInterface
    {

View on GitHub (pinned to fd8791d08d)

Solutions

  1. Inspect the 'Cannot render reports.default.month' log line — the original message is there even though the exception text omits it.
  2. Run php artisan view:clear and retry.
  3. Confirm resources/views/reports/default/month.blade.php and its @include partials exist in this release.
  4. Diff local overrides against the shipped default report views.
Defensive patterns

Strategy: try-catch

Validate before calling

if (!view()->exists('reports.default.month')) {
    abort(500, 'Standard month report view missing');
}

Try / catch

try {
    $html = $generator->generate();
} catch (FireflyException $e) {
    if ('Could not render report view.' === $e->getMessage()) {
        // message carries no details: read getPrevious()/log for the real cause
        $html = '';
    } else {
        throw $e;
    }
}

Prevention

When it happens

Trigger: Missing or renamed default month template/partial; view overrides referencing variables not among accountIds, reportType, start, end; PHP errors in helpers or composers used by the template; stale compiled views.

Common situations: Broken upgrades where the standard report views changed; heavy view customization colliding with new Blade structure.

Related errors


AI-assisted analysis of firefly-iii/firefly-iii@fd8791d08d (2026-08-17). Data as JSON: /api/errors/9d96c9af9fd34024. Report an issue: GitHub.