acorn icon indicating copy to clipboard operation
acorn copied to clipboard

route() returns incorrect URLs when request is not handled by index.php

Open stefanfisk opened this issue 1 year ago • 6 comments

Version

v4.3.0

What did you expect to happen?

I expected route() to return correct URLs whenever used.

What actually happens?

When used outside of the frontend or console route() prefixes the URLs with whatever .php file WordPress handled the request via.

So http://localhost/my-route becomes http://localhost/wp/wp-admin/admin-post.php/my-route etc.

The issue can be solved by calling Illuminate\Support\Facades\URL::forceRootUrl(home_url()) during boot but I am not sure about possible caveats.

Steps to reproduce

  1. Add Route::get('/test')->name('test'); to routes/web.php
  2. Add add_action('admin_post_nopriv_route_test', function() { echo route('test'); }); to functions.php
  3. Open /wp-admin/admin-post.php?action=route_test as appropriate for your local environment

System info

Pop!_OS 22.04 LTS

Log output

No response

Please confirm this isn't a support request.

Yes

stefanfisk avatar Sep 11 '24 13:09 stefanfisk

Just to be clear, the bug is that Laravel routes don't work within the wp-admin?

retlehs avatar Sep 11 '24 13:09 retlehs

Getting the URL of a Laravel route is broken in wp-admin and possibly other places that do not use index.php as the entrypoint.

stefanfisk avatar Sep 11 '24 13:09 stefanfisk

Got any examples of what other places that could possibly be?

Acorn is typically booted via the after_setup_theme hook 🤔

retlehs avatar Sep 11 '24 13:09 retlehs

wp-cron.php for example.

stefanfisk avatar Sep 11 '24 13:09 stefanfisk

And wp-admin includes both admin-post.php and admin-ajax.php which are frequently used by the frontend. So thinking of it as only affecting wp-admin can be misleading.

stefanfisk avatar Sep 11 '24 13:09 stefanfisk

If I understand it all correctly the root cause is that WordPress doesn't use a single file as its entry point, which confuses this function https://github.com/symfony/symfony/blob/44395abfcb2c859b26e0c6880c74dadd94da1038/src/Symfony/Component/HttpFoundation/Request.php#L1776.

stefanfisk avatar Sep 11 '24 13:09 stefanfisk