Skip to content

Different getPrefix() behavior for cached and non-cached routes #50239

@kudashevs

Description

@kudashevs

Laravel Version

10.45.1

PHP Version

8.1.27

Database Driver & Version

No response

Description

The getPrefix() method of the Illuminate\Routing\Route returns different values for non-cached and cached routes:

  • /{locale} - the return value of the getPrefix() method for a non-cached route
  • {locale} - the return value of the getPrefix() method for a cached route

This discrepancy in the results for non-cached/cached routes seems a sort of bug to me.

This issue might be related with #43882 and #43997.

Steps To Reproduce

After installing a new Laravel project, just add a route group to the web routes (the /routes/web.php file). For example:

Route::group([ 'prefix' => '{locale}', 'where' => ['locale' => 'en|fr|de'], ], function () { Route::get('/', function () { return view('welcome'); }); });

Then, use the tinker tool to get the registered routes and check the getPrefix() return values.
Let's check the non-cacned routes:

$routes = app('router')->getRoutes()->get('GET'); foreach ($routes as $route) { dump($route->getPrefix()); }

The result is going to be:
image

Then, we can cache the routes with artisan route:cache command and use tinker again.

$routes = app('router')->getRoutes()->get('GET'); foreach ($routes as $route) { dump($route->getPrefix()); }

The result is going to be:
image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions