Ziggy: A Package for Named Laravel Routes in JavaScript
Published on by Paul Redmond
Ziggy is a package that exposes named Laravel routes in JavaScript. When you update named routes in Laravel, the front end will automatically stay in sync.
What I like about this package is that all you have to do (after installing the package) is use the provided @routes
blade directive in your layout:
<html lang="en"> <!-- ... --> <body> @routes <script src="{{ mix('js/app.js') }}"></script> </body></html>
The @routes
directive defines named routes in a JavaScript variable and provides you with a route()
JavaScript helper similar to Laravel’s PHP route helper:
var routeUrl = route('posts.index');var routeUrl = route('posts.show', {post: 1337}); // Returns results from /postsreturn axios.get(route('posts.index')) .then((response) => { return response.data; });
Updating named Laravel routes on the backend will automatically keep your front end requests in sync.
Ziggy was written by Daniel Coulbourne from Tighten Co, a Laravel partner. Daniel Coulbourne explains the background story about why he wrote Ziggy:
My JavaScript is full of axios calls, which are made to hard-coded API endpoint URLs in my Laravel apps. This can be a real pain when an endpoint route needs to be moved to a group with a URL prefix, when a parameter needs to be added, or when any other URL-breaking change needs to be made.
This is why, in Laravel, we have named routes, and why we don’t hard-code URLs in our Blade templates. By abstracting away the need for our consuming code to know the exact (down-to-the-letter) URL for a route, we are able to write more change-resilient code—and avoid a lot of “find and replace.”
We wanted the same kind of protection and convenience in JavaScript that we have inside our Laravel apps. And that’s why we built Ziggy.
Read Daniel’s full post introducing Ziggy; he also mentions other packages similar to Ziggy and some inspirational ideas around the concept. You can find Ziggy’s source code on GitHub.