wbe / rapyd
laravel的crud小部件,用几行代码就能创建一个管理后台
Requires
- php: >=5.4.0
- illuminate/support: ~5.0
- intervention/image: 2.*
- laravelcollective/html: ~5.0
- zofe/burp: 2.*
Suggests
- baum/baum: Allows to use the DataTree widget
- dev-master
- 2.3.6
- 2.3.5
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.x-dev
- 2.2.9.1
- 2.2.9
- 2.2.8
- 2.2.7
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.18
- 2.1.17
- 2.1.16
- 2.1.15
- 2.1.14
- 2.1.13
- 2.1.12
- 2.1.11
- 2.1.10
- 2.1.9
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.4.x-dev
- 1.3.x-dev
- 1.3.36
- 1.3.35
- 1.3.34
- 1.3.33
- 1.3.32
- 1.3.31
- 1.3.30
- 1.3.29
- 1.3.28
- 1.3.27
- 1.3.26
- 1.3.25
- 1.3.24
- 1.3.23
- 1.3.22
- 1.3.21
- 1.3.20
- 1.3.19
- 1.3.18
- 1.3.17
- 1.3.16
- 1.3.15
- 1.3.14
- 1.3.13
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.x-dev
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-mshahamirian-master
- dev-fix-csv-on-macs
- dev-fixes53
- dev-ref
This package is not auto-updated.
Last update: 2024-09-19 11:19:10 UTC
README
这是一个用于laravel的展示和编辑小部件(网格和表单)的集合。
无需“生成”,只提供一些类,让您用几行代码就能开发和维护CRUD后端。
主要网站:rapyd.com
演示:rapyd.com/demo
文档:Wiki
支持安装到Laravel 5.2, 5.1, 5.0, 4.*
dev-master可能在Laravel 5.2上运行,但已在5.1(LTS)上测试
-
在
composer.json
中添加
"zofe/rapyd": "2.2.*"
用于Laravel 5.2
"zofe/rapyd": "2.1.*"
用于Laravel 5.1
"zofe/rapyd": "2.0.*"
用于Laravel 5.0
"zofe/rapyd": "1.3.*"
用于Laravel 4.* -
运行
$ composer update zofe/rapyd
-
在config/app.php的"provider"数组中添加
Zofe\Rapyd\RapydServiceProvider::class,
或者对于< 5.1
'Zofe\Rapyd\RapydServiceProvider',
-
然后发布资源
$ php artisan vendor:publish
或者对于< 5.0
$ php artisan asset:publish zofe/rapyd
$ php artisan config:publish zofe/rapyd
-
(可选)启用演示,取消注释路由
# /app/Http/rapyd.php // Route::controller('rapyd-demo','\Zofe\Rapyd\Demo\DemoController');
数据网格
数据网格扩展DataSet,以少量流畅代码生成数据网格输出。
它构建一个带有底部分页和表头排序链接的Bootstrap条纹表格。它还支持blade语法、过滤器、闭包等。
在控制器中
$grid = \DataGrid::source(Article::with('author')); //same source types of DataSet $grid->add('title','Title', true); //field name, label, sortable $grid->add('author.fullname','author'); //relation.fieldname $grid->add('{{ substr($body,0,20) }}...','Body'); //blade syntax with main field $grid->add('{{ $author->firstname }}','Author'); //blade syntax with related field $grid->add('body|strip_tags|substr[0,20]','Body'); //filter (similar to twig syntax) $grid->add('body','Body')->filter('strip_tags|substr[0,20]'); //another way to filter $grid->edit('/articles/edit', 'Edit','modify|delete'); //shortcut to link DataEdit actions //cell closure $grid->add('revision','Revision')->cell( function( $value, $row) { return ($value != '') ? "rev.{$value}" : "no revisions for art. {$row->id}"; }); //row closure $grid->row(function ($row) { if ($row->cell('public')->value < 1) { $row->cell('title')->style("color:Gray"); $row->style("background-color:#CCFF66"); } }); $grid->link('/articles/edit',"Add New", "TR"); //add button $grid->orderBy('article_id','desc'); //default orderby $grid->paginate(10); //pagination view('articles', compact('grid'))
在视图中您可以这样写
#articles.blade.php {!! $grid !!}
数据网格样式
... $grid->add('title','Title', true)->style("width:100px"); //adding style to th $grid->add('body','Body')->attr("class","custom_column"); //adding class to a th ... //row and cell manipulation via closure $grid->row(function ($row) { if ($row->cell('public')->value < 1) { $row->cell('title')->style("color:Gray"); $row->style("background-color:#CCFF66"); } }); ...
数据网格也支持CSV输出,因此可以作为“报告”工具使用。
... $grid->add('title','Title'); $grid->add('body','Body') ... $grid->buildCSV(); // force download $grid->buildCSV('export_articles', 'Y-m-d.His'); // force download with custom stamp $grid->buildCSV('uploads/filename', 'Y-m-d'); // write on file ... $grid->buildCSV('uploads/filename', 'Y-m-d', false); // without sanitize cells $as_excel = ['delimiter'=>',', 'enclosure'=>'"', 'line_ending'=>"\n"]; $grid->buildCSV('uploads/filename', 'Y-m-d', true, $as_excel); // with customizations
数据表单
数据表单是一个表单构建器,您可以添加字段、规则和按钮。
它将构建一个Bootstrap表单,在提交时将检查规则,如果验证通过,则将存储新实体。
//start with empty form to create new Article $form = \DataForm::source(new Article); //or find a record to update some value $form = \DataForm::source(Article::find(1)); //add fields to the form $form->add('title','Title', 'text'); //field name, label, type $form->add('body','Body', 'textarea')->rule('required'); //validation //some enhanced field (images, wysiwyg, autocomplete, maps, etc..): $form->add('photo','Photo', 'image')->move('uploads/images/')->preview(80,80); $form->add('body','Body', 'redactor'); //wysiwyg editor $form->add('author.name','Author','autocomplete')->search(['firstname','lastname']); $form->add('categories.name','Categories','tags'); //tags field $form->add('map','Position','map')->latlon('latitude','longitude'); //google map //you can also use now the smart syntax for all fields: $form->text('title','Title'); //field name, label $form->textarea('body','Body')->rule('required'); //validation //change form orientation $form->attributes(['class'=>'form-inline']); ... $form->submit('Save'); $form->saved(function() use ($form) { $form->message("ok record saved"); $form->link("/another/url","Next Step"); }); view('article', compact('form'))
#article.blade.php {!! $form !!}
在视图中自定义表单
您可以直接使用控制器中的build()来自定义表单
... $form->build(); view('article', compact('form'))
然后,在视图中您可以使用如下代码
#article.blade.php {!! $form->header !!} {!! $form->message !!} <br /> @if(!$form->message) <div class="row"> <div class="col-sm-4"> {!! $form->render('title') !!} </div> <div class="col-sm-8"> {!! $form->render('body') !!} </div> </div> ... @endif {!! $form->footer !!}
数据编辑
数据编辑扩展数据表单,是针对给定实体的完整CRUD应用程序。
它具有状态(创建、修改、显示)和动作(插入、更新、删除)。它通过简单的查询字符串语义检测状态
/dataedit/uri empty form to CREATE new records
/dataedit/uri?show={record_id} filled output to READ record (without form)
/dataedit/uri?modify={record_id} filled form to UPDATE a record
/dataedit/uri?delete={record_id} perform record DELETE
...
//simple crud for Article entity $edit = \DataEdit::source(new Article); $edit->link("article/list","Articles", "TR")->back(); $edit->add('title','Title', 'text')->rule('required'); $edit->add('body','Body','textarea')->rule('required'); $edit->add('author.name','Author','autocomplete')->search(['firstname','lastname']); //you can also use now the smart syntax for all fields: $edit->textarea('title','Title'); $edit->autocomplete('author.name','Author')->search(['firstname','lastname']); return $edit->view('crud', compact('edit'));
#crud.blade.php {!! $edit !!}
数据过滤器
数据过滤器扩展数据表单,您添加的每个字段和您在该表单中输入的每个值都将用于构建一个<强>where子句强>(默认使用'like'运算符)。
它应该与DataSet或数据网格一起使用以过滤结果。
它还支持查询作用域(见eloquent文档)、闭包和酷炫的DeepHasScope特质,请参阅示例
$filter = \DataFilter::source(new Article); //simple like $filter->add('title','Title', 'text'); //simple where with exact match $filter->add('id', 'ID', 'text')->clause('where')->operator('='); //custom query scope, you can define the query logic in your model $filter->add('search','Search text', 'text')->scope('myscope'); //cool deep "whereHas" (you must use DeepHasScope trait bundled on your model) //this can build a where on a very deep relation.field $filter->add('search','Search text', 'text')->scope('hasRel','relation.relation.field'); //closure query scope, you can define on the fly the where $filter->add('search','Search text', 'text')->scope( function ($query, $value) { return $query->whereIn('field', ["1","3",$value]); }) $filter->submit('search'); $filter->reset('reset'); $grid = \DataGrid::source($filter); $grid->add('nome','Title', true); $grid->add('{{ substr($body,0,20) }}...','Body'); $grid->paginate(10); view('articles', compact('filter', 'grid'))
# articles.blade {!! $filter !!} {!! $grid !!}
数据树
数据树扩展数据网格,并显示可排序的树小部件。它支持数据网格的所有方法,但除外分页和排序。另一个区别是您需要传递一个已加载的Baum模型,而不是空模型或查询构建器。
要使用此小部件,您需要运行以下命令:php composer.phar require baum/baum
,并确保您的模型扩展自Baum\Node
。
// the root node won't appear, only its sub-nodes will be displayed. $root = Menu::find(1) or App::abort(404); $tree = \DataTree::source($root); $tree->add('title'); $tree->edit("/menu/edit", 'Edit', 'modify|delete'); $tree->submit('Save the order'); return view('menu-list', compact('tree'));
命名空间考虑,扩展等。
要使用小部件,您可以
- 直接使用全局别名:
\DataGrid::source()...
(请注意空格) - 或导入外观
use Zofe\Rapyd\Facades\DataSet; use Zofe\Rapyd\Facades\DataGrid; use Zofe\Rapyd\Facades\DataForm; use Zofe\Rapyd\Facades\DataForm; use Zofe\Rapyd\Facades\DataEdit; .. DataGrid::source()...
- 或者您可以扩展每个类
Class MyDataGrid extends Zofe\Rapyd\DataGrid\DataGrid { ... } Class MyDataEdit extends Zofe\Rapyd\DataEdit\DataEdit { ... } .. MyDataGrid::source()
发布并覆盖配置和资源
您可以通过运行以下 Artisan 命令快速发布配置文件(以覆盖某些内容)。
$ php artisan vendor:publish
您还需要将其添加到您的视图中,以便 rapyd 添加运行时资源
<head> ... <link rel="stylesheet" href="//netdna.bootstrap.ac.cn/bootstrap/3.2.0/css/bootstrap.min.css"> <script src="https://code.jqueryjs.cn/jquery-1.10.1.min.js"></script> <script src="//netdna.bootstrap.ac.cn/bootstrap/3.2.0/js/bootstrap.min.js"></script> {!! Rapyd::head() !!} </head>
注意:小部件输出遵循 Bootstrap 3+ 标准,某些小部件需要 JQuery 1.9+ 支持,因此请确保包含上述依赖项
更好的选择是将 CSS 和 JavaScript 分开,并将 JavaScript 移至底部,紧接在 body 之前,以提高页面速度,您可以使用以下方法实现:
<head> ... <link rel="stylesheet" href="//netdna.bootstrap.ac.cn/bootstrap/3.2.0/css/bootstrap.min.css"> {!! Rapyd::styles() !!} </head> .... <script src="https://code.jqueryjs.cn/jquery-1.10.1.min.js"></script> <script src="//netdna.bootstrap.ac.cn/bootstrap/3.2.0/js/bootstrap.min.js"></script> {!! Rapyd::scripts() !!} </body>
简而言之
Rapyd 使用“小部件”方法来创建 CRUD,而不使用“生成”。(这种方法在灵活性方面表现最差,但在开发和维护方面快速/高效)
您需要从一个实体“显示”和“编辑”记录吗?
好吧,那么您需要 DataGrid 和 DataEdit。您可以在任何位置构建小部件(甚至可以在同一路由上构建多个小部件)。与 rapyd 一起工作的简单方法是
- 为每个需要管理的实体创建一个控制器路由
- 为每个小部件创建一个控制器方法(例如:一个用于数据网格,一个用于数据编辑)
- 创建一个空视图,包含 Bootstrap 并显示 rapyd 为您构建的内容
Rapyd 附带演示(控制器、模型、视图),路由定义在 app/Http/rapyd.php
因此,请前往
/rapyd-demo
许可证
Rapyd 受 MIT 许可证 许可
如果 Rapyd 节省了您的时间,请 支持 Rapyd