uzbek/urlex

生成一个Blade指令,导出你所有的命名Laravel路由。

v0.0.1 2019-06-02 08:43 UTC

This package is not auto-updated.

Last update: 2024-09-17 08:22:50 UTC


README

Urlex创建了一个Blade指令,您可以在视图中包含它。这将导出一个JavaScript对象,其中包含您应用程序的命名路由,按其名称(别名)键入,您可以使用它来在JavaScript中访问路由。

安装

  1. 将Urlex添加到您的Composer文件中:composer require uzbek/urlex

  2. (如果使用Laravel 5.4) 将Uzbek\Urlex\UrlexServiceProvider::class添加到您的config/app.php中的providers数组。

  3. 在您的模板中包含我们的Blade指令(@routes),在主应用程序JavaScript加载之前——很可能在头部。

用法

此包用所有应用程序路由的集合替换了@routes指令,按名称键入。此集合在Urlex.namedRoutes中可用。

示例

即将推出

默认值

请参阅Laravel 文档

默认值在Laravel版本 >= 5.5.29的情况下自动生效,对于旧版本,您需要在包含Blade指令(@routes)的同一页面上设置默认参数

Urlex.defaultParameters = {
    //example
    locale: "en"
}

路由过滤

过滤路由是完全可选的。如果您想默认将所有路由传递到JavaScript,您可以继续使用Urlex,如上所述。

基本白名单和黑名单

为了利用基本路由的白名单或黑名单,您首先需要在Laravel应用程序的config/目录中创建一个名为Urlex.php的标准配置文件,并将whitelistblacklist设置设置为路由名称的数组。

注意:您必须选择其一。同时设置whitelistblacklist将完全禁用过滤,并仅返回默认路由列表。

示例 config/Urlex.php

<?php
return [
    // 'whitelist' => ['home', 'api.*'],
    'blacklist' => ['debugbar.*', 'horizon.*', 'admin.*'],
];

如上例所示,Urlex在过滤器中使用星号作为通配符。`home`将仅匹配名称为`home`的路由,而`api.*`将匹配任何名称以`api.`开头的路由,例如`api.posts.index`和`api.users.show`。

简单的白名单和黑名单宏

您也可以使用以下宏来实现白名单和黑名单。

示例白名单

Route::whitelist(function () {
    Route::get('...')->name('posts');
});

Route::whitelist()->get('...')->name('posts');

示例黑名单

Route::blacklist(function () {
    Route::get('...')->name('posts');
});

Route::blacklist()->get('...')->name('posts');

使用分组的高级白名单

您还可以在config/urlex.php中定义多个白名单,通过定义groups

<?php
return [
    'groups' => [
        'admin' => [
            'admin.*',
            'posts.*',
        ],
        'author' => [
            'posts.*',
        ]
    ],
];

在上面的示例中,您可以看到我们已为不同的用户角色配置了多个白名单。您可以通过将组键传递到Blade视图中@routes来公开特定的白名单组。示例

@routes('author')

注意:使用组将始终优先于上述提到的whitelistblacklist设置。

Artisan命令

Urlex发布了一个Artisan命令来生成一个urlex.js路由文件,可以用于资产管道,如Laravel Mix

您可以在项目中运行php artisan urlex:generate来生成一个静态路由文件在resources/assets/js/Urlex.js

可选地,包括第二个参数来覆盖路径和文件名(您必须传递一个包含路径的文件名)

php artisan urlex:generate "resources/foo.js"

示例 urlex.js,其中名称为homelogin的路由存在于routes/web.php

// routes/web.php

<?php

Route::get('/', function () {
    return view('welcome');
})->name('home');

Route::get('/login', function () {
    return view('login');
})->name('login');
// urlex.js

var Urlex = {
    namedRoutes: {"home":{"uri":"\/","methods":["GET","HEAD"],"domain":null},"login":{"uri":"login","methods":["GET","HEAD"],"domain":null}},
    baseUrl: 'http://myapp.local/',
    baseProtocol: 'http',
    baseDomain: 'myapp.local',
    basePort: false
};

export {
    Urlex
}

贡献 & 信用