Skip to content

Add back() support to the response redirect API and align redirect helpers around it #540

Description

@armanist

Summary

Add first-class “go back” support to the HTTP response redirect API.

The goal is to stop repeating manual referrer fallback patterns such as redirect(get_referrer() ?? base_url()) and provide a cleaner redirect-back flow through the response layer.

Why

The current HTTP helper surface already supports:

  • redirect(string $url, int $code = 302)
  • redirectWith(string $url, array $data, int $code = 302)
  • get_referrer()
  • old(string $key)

But the codebase repeatedly uses manual “back” logic such as:

  • redirect(get_referrer() ?? base_url())
  • redirectWith(get_referrer() ?? base_url(), $data)

This creates repeated fallback logic in controllers, middlewares, and templates, and it exposes redirect implementation details at call sites instead of making “go back” a first-class response capability.

Goal

Introduce a clear back() redirect flow at the response/API level and align helper usage around it.

Proposed Direction

Add response-level back redirect support

Add a response API for redirecting back, with a defined fallback behavior when no referrer is available.

The exact shape can be decided during implementation, but it should support a response-first flow such as:

  • response()->back()
  • or response()->redirect()->back()

Preserve helper convenience where appropriate

If helper compatibility is desired, provide helper-level support that delegates to the response API rather than keeping manual fallback patterns spread throughout the codebase.

Examples of the intended cleanup direction:

  • redirect(get_referrer() ?? base_url())
  • redirectWith(get_referrer() ?? base_url(), $data)

should become a cleaner first-class back-navigation API.

Define fallback behavior explicitly

The implementation should define what happens when no referrer exists.

A sensible default appears to be current behavior:

  • fallback to base_url()

but this should be an intentional contract rather than repeated ad hoc logic.

Keep old-input behavior aligned

Current redirectWith() behavior stores previous request data in session for later retrieval via old().

The new back-navigation flow should be designed so old-input redirect behavior remains coherent and can fit naturally into the redirect API.

Acceptance Criteria

  • response-level back-navigation redirect support exists
  • manual referrer fallback patterns are no longer required for common “go back” redirects
  • fallback behavior when no referrer exists is explicitly defined
  • helper-level redirect behavior remains coherent with the response API
  • current old-input/session redirect behavior remains supported
  • the resulting API is suitable for follow-up cleanup of templates and generated module code

Notes

Relevant code:

  • src/Http/Helpers/http.php
  • src/Http/Response.php
  • src/Http/Traits/Response
  • src/App/Enums/ReservedKeys.php

Examples of current repeated usage exist across module templates, controllers, and middlewares.

This ticket should come before the follow-up cleanup ticket that updates templates to prefer the new response redirect style.

Activity

  1. added this to the 3.1.0 milestone on Jun 18, 2026
  2. added
    httpHTTP transport, redirects, and request/response behavior
    on Jun 20, 2026
  3. modified the milestones: 3.1.0, 3.2.0, 3.1.1 on Oct 23, 2026
  4. self-assigned this
    on Oct 26, 2026
  5. added 5 commits that reference this issue on Oct 27, 2026
  6. added 2 commits that reference this issue on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

good first issueGood for newcomershttpHTTP transport, redirects, and request/response behavior

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions