te7a-houdini / laroute
Access Laravels URL/Route helper functions, from JavaScript.
Installs: 510 936
Dependents: 0
Suggesters: 0
Security: 0
Stars: 34
Watchers: 1
Forks: 5
Open Issues: 0
Requires
- php: >=7.1.3
- illuminate/config: ~5.8.0|~6.0|~7.0|~8.0
- illuminate/console: ~5.8.0|~6.0|~7.0|~8.0
- illuminate/filesystem: ~5.8.0|~6.0|~7.0|~8.0
- illuminate/routing: ~5.8.0|~6.0|~7.0|~8.0
- illuminate/support: ~5.8.0|~6.0|~7.0|~8.0
Requires (Dev)
- mockery/mockery: ^1.2
- orchestra/testbench: ^3.5|~4.0|~5.0
This package is auto-updated.
Last update: 2024-10-28 16:49:49 UTC
README
This package is continuous development of aaronlord/laroute.
Laroute
Laravel has some pretty sweet helper functions for generating urls/links and its auto-json-magic makes it building APIs super easy. It's my go-to choice for building single-page js apps, but routing can quickly become a bit of a pain.
Wouldn't it be amazing if we could access our Laravel routes from JavaScript?
This package allows us to port our routes over to JavaScript, and gives us a bunch of very familiar helper functions to use.
Installation
Install the usual composer way.
composer require te7a-houdini/laroute
Configure (optional)
Copy the packages config files.
php artisan vendor:publish --provider='Te7aHoudini\Laroute\LarouteServiceProvider'
app/config/packages/Te7aHoudini/laroute/config.php
return [ /* * The destination path for the javascript file. */ 'path' => 'public/js', /* * The destination filename for the javascript file. */ 'filename' => 'laroute', /* * The namespace for the helper functions. By default this will bind them to * `window.laroute`. */ 'namespace' => 'laroute', /* * Generate absolute URLs * * Set the Application URL in config/app.php */ 'absolute' => false, /* * The Filter Methode * * 'all' => All routes except "'laroute' => false" * 'only' => Only "'laroute' => true" routes * 'force' => All routes, ignored "laroute" route parameter */ 'filter' => 'all', /* * Action Namespace * * Set here your controller namespace (see RouteServiceProvider -> $namespace) for cleaner action calls * e.g. 'App\Http\Controllers' */ 'action_namespace' => '', /* * The path to the template `laroute.js` file. This is the file that contains * the ported helper Laravel url/route functions and the route data to go * with them. */ 'template' => 'vendor/te7a-houdini/laroute/src/templates/laroute.js', /* * Appends a prefix to URLs. By default the prefix is an empty string. * */ 'prefix' => '', ];
Generate the laroute.js
To access the routes, we need to "port" them over to a JavaScript file:
php artisan laroute:generate
With the default configuration, this will create a public/js/laroute.js
file to include in your page, or build.
<script src="/js/laroute.js"></script>
Note: You'll have to laroute:generate
if you change your routes.
JavaScript Documentation
By default, all of the functions are under the laroute
namespace. This documentation will stick with this convention.
action
Generate a URL for a given controller action.
/** * laroute.action(action, [parameters = {}]) * * action : The action to route to. * parameters : Optional. key:value object literal of route parameters. */ laroute.action('HomeController@getIndex');
route
Generate a URL for a given named route.
/** * laroute.route(name, [parameters = {}]) * * name : The name of the route to route to. * parameters : Optional. key:value object literal of route parameters. */ laroute.route('Hello.{planet}', { planet : 'world' });
url
Generate a fully qualified URL to the given path.
/** * laroute.url(name, [parameters = []]) * * name : The name of the route to route to. * parameters : Optional. value array of route parameters. */ laroute.url('foo/bar', ['aaa', 'bbb']); // -> /foo/bar/aaa/bbb
link_to
Generate a html link to the given url.
/** * laroute.link_to(url, [title = url, attributes = {}]]) * * url : A relative url. * title : Optional. The anchor text to display * attributes : Optional. key:value object literal of additional html attributes. */ laroute.link_to('foo/bar', 'Foo Bar', { style : "color:#bada55;" });
link_to_route
Generate a html link to the given route.
/** * laroute.link_to_route(name, [title = url, parameters = {}], attributes = {}]]]) * * name : The name of the route to route to. * title : Optional. The anchor text to display * parameters : Optional. key:value object literal of route parameters. * attributes : Optional. key:value object literal of additional html attributes. */ laroute.link_to_route('home', 'Home');
link_to_action
Generate a html link to the given action.
/** * laroute.link_to_action(action, [title = url, parameters = {}], attributes = {}]]]) * * action : The action to route to. * title : Optional. The anchor text to display * parameters : Optional. key:value object literal of route parameters. * attributes : Optional. key:value object literal of additional html attributes. */ laroute.link_to_action('HelloController@planet', undefined, { planet : 'world' });
PHP Documentation
Ignore/Filter Routes
By default, all routes are available to laroute after a php artisan laroute:generate
. However, it is sometimes desirable to have laroute ignore certain routes. You can do this by passing a laroute
route option.
Route::get('/ignore-me', [ 'laroute' => false, 'as' => 'ignoreme', 'uses' => 'IgnoreController@me' ]); Route::group(['laroute' => false], function () { Route::get('/groups-are-super-useful', 'GroupsController@index'); });