afonzeca/universalsimplegrid

Universal Simple Grid (Usg) 包的目的是为 Laravel 5 开发者提供一个简单的方法,通过使用简单的类和方法以及代码中的“流畅”方法,在“数据网格”内创建、管理和表示数据库数据表。

dev-master 2018-10-20 11:14 UTC

This package is auto-updated.

Last update: 2024-09-22 00:00:52 UTC


README

Universal Simple Grid (Usg) 包的目的是为 Laravel 5 开发者提供一个简单的方法,通过使用简单的类和方法以及代码中的“流畅”方法,在“数据网格”内创建、管理和表示数据库数据表。该包本身没有自己的数据网格引擎,但它使用“网格供应商驱动程序”的概念(见下一段)。

注意:该项目处于alpha阶段,存在bug,它只是一个想法的“框架”... 很抱歉,由于时间不足,代码以及尤其是服务提供程序部分(包括文档和代码)尚未完成。

代码示例

在描述 Usg 项目的优点和方法之前,让我们看看一个使用和不使用 Usg 的代码片段。

在示例中,一个典型的 Laravel 控制器,我将使用“Nayjest 供应商驱动程序”,然后提供一个链接到“vanilla”Nayjest 网格代码,以显示差异(有关 Nayjest 网格的详细信息,请参阅https://github.com/Nayjest/Grids

使用 Usg... 卢克!

<?php

namespace App\Http\Controllers;

use AFonzeca\UniversalSimpleGrid\UsgFactory;

class Demo extends Controller
{
    // Full demo of Ny Grid Driver

    public function nyGridFull()
    {

        // Define a Query Builder for retriving data
        $dataSource =
            UsgFactory::factory('NyGrid', 'DataSourceHandler')
            ->init(
                (new \App\Contact())
                ->newQuery()
            );

        // Define the upper part of the grid using a WidgetsBar
        // Put a select box for number of records per page
        // Add a filter button
        $contactHeaderWidget =
            UsgFactory::factory('NyGrid', 'WidgetsBar')
            ->addWidgetRecordsPerPage([10, 25, 50])
            ->addWidgetDoButton();

        // Define the lower part of the grid using a WidgetsBar
        // Put a pagination widget
        $contactFooterWidget =
            UsgFactory::factory('NyGrid', 'WidgetsBar')
            ->addPagination();

        // Define a new grid for an ipotetical "contact" table, attach the widget on the top
        // of grid, define icons and fields.
        $contactGridConfig =
            UsgFactory::factory('NyGrid', 'GridSetup')
            ->setIcons(UsgFactory::factory('NyGrid', 'GlyphiconIcons'))
            ->setIdKey('id')
            ->setBasePath('contact')
            ->setBuilder($dataSource)
            ->attachToHead($contactHeaderWidget)
            ->addBsEditIcon()
            ->addGenericBsIconWithBasePath('glyphicon-tags', 'copy', 'contact', true)
            ->addFieldWithFilterAndOrder('name', 'First Name')
            ->addFieldWithFilterAndOrder('surname', 'Surname')
            ->addBsTrashIcon()
            ->attachToFooter($contactFooterWidget);

        // Get the grid string and pass it to view
        $contactGrid =
            UsgFactory::factory('NyGrid', 'Grid')
            ->init($contactGridConfig)
            ->getGrid();

        return view('demo.fullGrid', compact('contactGrid'));
    }
}
?>

将网格字符串传递给视图后,使用以下方法打印它

<?php 

echo $contactGrid; 

?>

或者使用 Blade

{!! $contactGrid !!}

旧方法!不使用 Usg 制作网格

我正在改进文档... 同时,请查看 Nayjest 网格的“README”(高级示例段落),以了解使用数组配置网格的示例

结果很棒,但代码并不太紧凑(感谢 Vitalii Stepanenko 的出色工作!)

所以让我们使用 Usg!;-)

动机和概念

动机

Usg 包可以被看作是一个“微型框架”,由一系列抽象 API(接口和抽象类)以及一组“网格供应商驱动程序”组成,这些驱动程序是这些 API 的真实实现,以支持不同供应商的每个网格引擎。API 的目标是隐藏其方法背后的真实方法集,这些方法针对特定的数据网格供应商实现。因此,“网格供应商驱动程序”将仅公开 Usg 定义的实现中通用的对象和方法。这些方法允许使用相同的代码操纵、配置和使用不同供应商的每个网格。

优点是,开发者只需编写一次数据网格的代码,如果需要替换由特定供应商制作的网格,只需更改两三行代码(工厂类允许通过指定供应商名称来实例化驱动程序)。

Usg 是管理 Laravel 5 数据网格的一种优雅、快速、智能和简单的方式

正如之前所说,Usg 还是为了简化并减少创建网格的代码。实际上,正如上面所示,许多本地数据网格实现都需要开发者指定长数组中的参数(名称、标签、属性... 对于网格的每个字段)。

虽然这种方法很灵活,结果也很棒(感谢 Vitalii Stepanenko;-),但有时很难维护和修复代码。确实,在修改或更改长数组元素中的一个或多个字段时,很容易出错。这可能会是一个非常缓慢的过程。

通过使用Usg及其流畅的接口和自带的网格供应商驱动,可以实现一个用于管理数据网格的“通用而优雅的语言”,其优势在于,如果开发者(或其客户)想更改网格的“引擎”,修改字段顺序等,这将变得非常容易。

备注

  • 目前(版本0.1)只有一个网格供应商驱动可用,允许使用Usg API访问Nayjest数据网格。我正在开发其他驱动,并在准备就绪时发布。

  • 项目处于alpha阶段,尽管在设计时考虑了良好的编码实践,但在这一阶段,规范可能会根据一些改进而更改。

  • 请勿在生产环境中使用

  • 本版本不支持关系

安装

使用Composer安装

在您的laravel 5项目中,使用命令行

composer require afonzeca/universalsimplegrid:"@dev"

要启用Ny驱动支持,请使用

composer require nayjest/grids laravelcollective/html

然后按照“Nayjest网格(Ny供应商驱动)备注”段落中的步骤进行操作

从GitHub源压缩包安装

  • 下载压缩包

  • 在您的laravel项目中创建 /vendor/afonzeca/,并在其中解压缩

  • 在config/app.php文件的 providers 下,粘贴以下内容

    AFonzeca\UniversalSimpleGrid\UsgInterfaceServiceProvider::class
  • 在项目根目录的composer.json中,在PSR-4下添加以下内容
"AFonzeca\\UniversalSimpleGrid\\": "vendor/afonzeca/universalsimplegrid-master/src"
  • 从命令行,在项目根目录中运行
composer dump-autoload

以下依赖项必须安装

  • php >=5.5.9
  • laravel/framework >=5.1
  • nayjest/grids
  • laravelcollective/html >=5.1

关于Nayjest网格(Ny供应商驱动)的备注

  1. 如果您想使用Nayjest网格,不要遵循他们GitHub的readme中的配置步骤。

    在您的config/app.php中添加以下内容(否则Laravel 5.*上的网格将无法工作)

    1.1) 将以下内容添加到“providers”数组底部

        Nayjest\Grids\ServiceProvider::class,
        Collective\Html\HtmlServiceProvider::class,
1.2) To the bottom of "aliases" array add the following:
        'Input' => Illuminate\Support\Facades\Input::class,
        'Form' => Collective\Html\FormFacade::class,
        'HTML' => Collective\Html\HtmlFacade::class,
        'Grids' => Nayjest\Grids\Grids::class,
  1. 您的视图(或您的master视图)必须包含对Bootstrap3的引用

API参考

所有代码都有良好的文档,请参阅universalsimplegrid/src/vendor/NyGrid文件夹中的Najest网格驱动程序可用方法。

每个方法都在Contracts文件夹的php文件中描述。另请参阅Abstracts文件夹。

如果您愿意,代码中的所有注释都是PhpDocumentator格式,因此您可以在包根目录(通常为/vendor/afonzeca/universalsimplegrid)中运行

phpdoc -d src

以生成超文本文档。

我正在编写关于API的手册/教程!我会尽快发布的!

如果您想帮助我,并想为特定网格创建“网格供应商驱动”……请与我联系!:-)

贡献者

目前……我自己(Angelo Fonzeca)!

本项目献给我的挚爱妻子Carla。

许可证

MIT许可证(MIT)版权所有(c)2016 Angelo Fonzeca

特此授予任何获得此软件及其相关文档文件(“软件”)副本的人免费使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的人这样做,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

本软件按照“现状”提供,不提供任何形式的保证,无论是明确的还是隐含的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,是否与软件有关、使用软件或对软件的其他处理有关。

https://open-source.org.cn/licenses/MIT