uzbek / urlex
生成一个Blade指令,导出你所有的命名Laravel路由。
Requires
- ext-json: *
- laravel/framework: ~5.4
Requires (Dev)
- mikey179/vfsstream: ^1.6
- orchestra/testbench: ~3.6
This package is not auto-updated.
Last update: 2024-09-17 08:22:50 UTC
README
Urlex创建了一个Blade指令,您可以在视图中包含它。这将导出一个JavaScript对象,其中包含您应用程序的命名路由,按其名称(别名)键入,您可以使用它来在JavaScript中访问路由。
安装
-
将Urlex添加到您的Composer文件中:
composer require uzbek/urlex
-
(如果使用Laravel 5.4) 将
Uzbek\Urlex\UrlexServiceProvider::class
添加到您的config/app.php
中的providers
数组。 -
在您的模板中包含我们的Blade指令(
@routes
),在主应用程序JavaScript加载之前——很可能在头部。
用法
此包用所有应用程序路由的集合替换了@routes
指令,按名称键入。此集合在Urlex.namedRoutes
中可用。
示例
即将推出
默认值
请参阅Laravel 文档
默认值在Laravel版本 >= 5.5.29的情况下自动生效,对于旧版本,您需要在包含Blade指令(@routes)的同一页面上设置默认参数
Urlex.defaultParameters = { //example locale: "en" }
路由过滤
过滤路由是完全可选的。如果您想默认将所有路由传递到JavaScript,您可以继续使用Urlex,如上所述。
基本白名单和黑名单
为了利用基本路由的白名单或黑名单,您首先需要在Laravel应用程序的config/
目录中创建一个名为Urlex.php
的标准配置文件,并将whitelist
或blacklist
设置设置为路由名称的数组。
注意:您必须选择其一。同时设置whitelist
和blacklist
将完全禁用过滤,并仅返回默认路由列表。
示例 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')
注意:使用组将始终优先于上述提到的whitelist
和blacklist
设置。
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
,其中名称为home
和login
的路由存在于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 }