peyman3d / laravel-share
Laravel 共享数据包
This package is not auto-updated.
Last update: 2024-09-24 16:50:41 UTC
README
Laravel Share 是一种轻松通过请求共享任何数据的方法。
简介
使用 Laravel Share,您可以通过请求共享任何数据以供以后使用。您可以将其视为无处不在的数组。我的意思是!从服务提供者到路由、中间件、控制器和视图。
安装
使用 Composer 安装
$ composer require peyman3d/laravel-share
安装完成后,您应在 config/app.php 文件中添加提供者和别名。如果您正在使用 Laravel 5.5 或 5.6,则可以跳过此步骤,因为 Laravel 可以自动发现此包。
- 添加到提供者数组
Peyman3d\Share::class,
- 添加到别名数组
'Share' => Peyman3d\Share\ShareFacade::class,
用法
使用 Laravel Share 简单如切蛋糕。只需想象一个人,您就可以这样共享数据
Share::make('Person') ->add('name', 'Peyman') ->add('email', 'salam@peyman.me') ->add('job', 'Web developer') ->edit('title', 'Mr');
当您想要这些数据时,只需使用 Share::get('Person');;
如您所见,您可以使用 make() 方法创建一个项目。然后,您可以通过使用 add($key, $value) 或 edit($key, $value) 添加参数到它。您还可以使用 share() 辅助函数代替 Share 门面。
share()->make('asset.js')->add('react', 'https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.production.min.js')
有一些基本方法用于处理数据数组
// Change key share()->key('menu'); // Make new item with key and value share()->make($key, $value, $single); // Create new item to current key share()->make('menu')->item('dashboard'); // Prepend an item to current key share()->make('menu')->prepend('posts'); // Add a child to array share()->make('menu')->item('users')->child('users-list'); // Check if key exists share()->key('menu')->has('dashboard'); // Get from array with key // Second parameter is for get result as single value or collection share()->key('menu')->get('users', true); // Pull data from array and delete it share()->key('menu')->pull('users', true); // Get all data share()->all(); // Delete data for current key share()->key('menu.users')->delete(); // Delete all data share()->reset();
可以共享哪些数据?
几乎任何东西。您可以共享任何字符串、数字、对象和闭包。
share()->make('user')->add('profile', auth()->user()); share()->menu('posts')->add('filter', function($value){ return '<h3>'.$value.'</h3>'; });
甚至更好的辅助函数
Laravel Share 有更多辅助函数来创建更好的语法。您可以使用这些辅助函数的任何组合。
share()->make('Job')->title('Senior Developer');
如您所见,title() 方法接受一个值并像 add('title', 'Senior Developer') 一样工作。
在此处查看所有辅助函数
id()title()subtitle()label()icon()link()route()route_attributes()href()fallback()callback()order()class()desc()type()default()options()name()placeholder()children()file()src()active()config()format()permission()count()attributes()field()blade()
除了这些参数辅助函数之外,我们还有一些用于部分和类型的辅助函数
menu()view()asset()js()css()script()style()
您可以查看一些示例
// Create new menu with items share()->menu()->item('dashboard')->label('Dashboard')->href('/admin/'); share()->menu()->item('users')->label('Users')->route('admin.users'); share()->menu('users')->child('users-profile')->label('Profile')->route('admin.users.profile'); share()->menu('users')->child('users-list')->label('All users')->route('admin.users.index'); share()->menu('users')->child('users-create')->label('Add new user')->route('admin.users.create'); // Manage Assets share()->js('jquery')->link('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js')->order(500); share()->js('react')->link('https://cdnjs.cloudflare.com/ajax/libs/react/16.4.0/umd/react.production.min.js')->order(300);
自定义辅助函数
我添加了一些对我有用的基本辅助函数,但您也可以添加您自己的。您还可以删除或编辑项目。下面是一些示例
// Arguments share()->addArg('avatar'); share()->removeArg('icon'); share()->editArg('subtitle', 'second-title'); if( share()->hasArg('config') ){ share()->editArg('config', 'setting'); } // Keys share()->addKey('table'); share()->removeKey('view'); share()->editKey('asset', 'libraries'); if( share()->hasKey('menu') ){ share()->editKey('menu', 'menus'); }
只是一个示例
想象一下,您有一个具有侧边栏菜单的仪表板。此菜单有多个项目,每个项目可能有子项目。现在,我们在菜单中添加一些项目
// Add dashboard share()->menu()->item('dashboard')->label('Dashboard')->icon('fa fa-dashboard')->route('admin.dashboard'); // Add posts and it's sub items share()->menu()->item('posts')->label('Posts') ->icon('fa fa-file-text-o')->route('admin.posts'); share()->menu('posts')->child('posts-list')->label('All posts') ->route('admin.posts.index'); share()->menu('posts')->child('posts-create')->label('Add new post') ->route('admin.posts.create'); // Add setting share()->menu()->item('settings')->label('Settings')->icon('fa fa-cogs'); foreach($setting_pages as $page){ share()->menu('settings')->child('setting-page-'.$page['id'])->label($page['label']) ->route('admin.settings') ->route_attributes(['slug'=>$page['slug']]); }
这些代码可以在任何地方:服务提供者、路由、中间件、控制器、模型,甚至是 blade 视图。如果您想的话,您还可以激活一个菜单项,如下所示
// PostController.php public function index(){ share()->key('menu.posts')->activate(); share()->key('menu.posts.children.posts-list')->activate(); }
您可以使用 order() 方法对项目进行排序。您可以在添加项目或任何其他时间和地点进行此操作。
// AdminMiddleware.php class AdminMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { share()->key('menu.posts')->order(100); return $next($request); } }
如果您没有设置顺序,它将计为 100。
最后,您可以在 blade 视图中使用这些数据,如 sidebar.blade.php,就像这样简单
<aside id="sidebar"> <ul class="menu"> @foreach( share()->menu()->get() as $item ) <li class="menu-item @if( array_has($item, 'children') ) has-child @endif @if(array_get($menu_item, 'active', false)) active @endif"> <a href="{{ make_menu_link($item) }}"> <i class="{{ array_get($item, 'icon') }}"></i> <span class="title">{{ array_get($item, 'label') }}</span> </a> @if( array_has($item, 'children') ) <ul class="sub-menu" @if(array_get($menu_item, 'active', false)) style="display: block;" @endif> @foreach( $item['children'] as $subitem ) <li><a href="{{ make_menu_link($subitem) }}">{{ $subitem['label'] }}</a></li> @endforeach </ul> @endif </li> @endforeach </ul> </aside>
这就是全部!只有一个事情。我使用了一个名为 make_menu_link() 的辅助函数,我编写了它来根据它具有的内容创建项目链接。它不在包中,因为它可能对您没有用处。但您可以在此链接中获取它。