surgio / laroute
从 JavaScript 访问 Laravel 的 URL/路由辅助函数。
Requires
- php: >=8.0
- illuminate/config: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/console: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/filesystem: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/routing: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: 5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: ~4.0|^9.5.10
README
Fork自 (aaronlord/laroute)[aaronlord#95],该分支将看似已废弃的包更新到 Laravel 的当前版本。建议使用 (https://github.com/tightenco/ziggy)[https://github.com/tightenco/ziggy]。
Laravel 提供了一些非常棒的 辅助函数 用于生成 URL/链接,其自动 JSON 魔法使构建 API 变得非常容易。它是构建单页 JS 应用程序的首选,但路由可能会变得有点麻烦。
如果我们可以从 JavaScript 访问 Laravel 路由,那岂不是太棒了?
此包允许我们将路由迁移到 JavaScript,并提供了一组非常熟悉的辅助函数来使用。
安装
按照常规 composer 方式安装。
composer.json
{ "require" : { "surgiollc/laroute" : "2.*" } }
app/config/app.php
... 'providers' => array( ... Surgio\Laroute\LarouteServiceProvider::class, ], ...
配置(可选)
复制包配置文件。
php artisan vendor:publish --provider='Surgio\Laroute\LarouteServiceProvider'
app/config/laroute.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/surgiollc/laroute/src/templates/laroute.js', /* * Appends a prefix to URLs. By default the prefix is an empty string. * */ 'prefix' => '', ];
生成 laroute.js
要访问路由,我们需要将它们“迁移”到一个 JavaScript 文件中
php artisan laroute:generate
默认配置下,这将创建一个 public/js/laroute.js
文件,您可以在页面或构建中包含它。
<script src="/js/laroute.js"></script>
注意:如果更改路由,您将需要 laroute:generate
。
JavaScript 文档
默认情况下,所有函数都在 laroute
命名空间下。本文档将遵循此约定。
action
为给定的控制器操作生成 URL。
/** * laroute.action(action, [parameters = {}]) * * action : The action to route to. * parameters : Optional. key:value object literal of route parameters. */ laroute.action('HomeController@getIndex');
route
为给定的命名路由生成 URL。
/** * 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
为给定的路径生成一个完全限定的 URL。
/** * 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
为给定的 URL 生成 HTML 链接。
/** * 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
为给定的路由生成 HTML 链接。
/** * 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
为给定的操作生成 HTML 链接。
/** * 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 文档
忽略/过滤路由
默认情况下,在执行 php artisan laroute:generate
之后,laroute 可用所有路由。然而,有时我们可能希望 laroute 忽略某些路由。您可以通过传递一个 laroute
路由选项来实现这一点。
Route::get('/ignore-me', [ 'laroute' => false, 'as' => 'ignoreme', 'uses' => 'IgnoreController@me' ]); Route::group(['laroute' => false], function () { Route::get('/groups-are-super-useful', 'GroupsController@index'); });