We recently did a pretty big internal overhaul of the Mastering Laravel site. Among the other changes, we restructured a bunch of routes.
With a public-facing, content-heavy site like ours, this makes me a bit cautious. I wanted to be sure we didn't inadvertently break any external sites linking to us.
First, I dumped the full route table from the old site, and then repeated this for the new site. To give me a cleaner diff, I exported as JSON instead of the tabular format:
php artisan route:list --json > ../routes-old.json
php artisan route:list --json > ../routes-new.json
Laravel lets you specify a sort option, but you can only sort by one field.
To get a more precise sort, I used jq
to normalize the sort order:
jq 'map({
method: .method,
uri: .uri,
name: .name,
action: .action,
middleware: (.middleware|sort)
}) | sort_by(.uri, .method, .name)' ../routes-old.json > ../routes-old.sorted.json
# repeat for the ../routes-new.json file
With these two normalized JSON files, I can then run a diff for these two files.
A visual diff made it very apparent what exactly had changed, giving me the confidence we wouldn't break links after launch.
Here to help,
Joel
P.S. Need some advice on a big refactor or project you're working on? An expert review can save you a lot of trouble. Book a quick call.