surgio/laroute

从 JavaScript 访问 Laravel 的 URL/路由辅助函数。

维护者

详细信息

github.com/surgiollc/laroute

源代码

安装量: 44,784

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 3

分支: 139

v4.0 2024-01-04 00:39 UTC

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,并提供了一组非常熟悉的辅助函数来使用。

Laroute in action

安装

按照常规 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');
});

许可证

在此存储库中查看许可证。