timenz / crud
Requires
- php: >=5.4.0
- illuminate/support: ~5.1
This package is not auto-updated.
Last update: 2024-09-14 19:25:29 UTC
README
Laravel 控制器扩展,便于创建 CRUD 页面。
限制和需求
- Laravel 5.1
- Mysql/Mariadb 数据库
- Bootstrap CSS 框架
- 每页只能有一个 CRUD
安装
添加到 composer.json
{
"require": {
"timenz/crud": "dev-master"
}
}
要添加对 WYSIWYG 和 图片 字段类型的支持,请添加以下两个从 guillermomartinez 和 kevbaldwyn 分叉的存储库,并更新 composer 要求
{
"require": {
"timenz/crud": "dev-master",
"timenz/filemanager-laravel": "dev-l5.1",
"timenz/image":"dev-l5.1"
}
}
然后更新
composer update
添加到 $app['providers']
\Timenz\Crud\CrudServiceProvider::class,
\Pqb\FilemanagerLaravel\FilemanagerLaravelServiceProvider::class,
\KevBaldwyn\Image\Providers\Laravel\ImageServiceProvider::class,
和到 $app['aliases']
'ImageSrc' => \KevBaldwyn\Image\Providers\Laravel\Facades\Image::class,
发布视图和资产
php artisan vendor:publish
JavaScript 库依赖
{
"bootstrap": "~3.3.0",
"bootstrap-datepicker": "1.3.0",
"chosen": "~1.4.2",
"eonasdan-bootstrap-datetimepicker": "~4.17.37"
}
主 blade 视图,此视图基本上来自 Bootstrap 示例页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Crud Master Example</title>
<link href="{{ asset('libs/bootstrap/dist/css/bootstrap.min.css') }}" rel="stylesheet">
<link href="{{ asset('libs/bootstrap-datepicker/css/datepicker3.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/bootstrap-chosen.css') }}" rel="stylesheet">
<link href="{{ asset('assets/css/navbar-fixed-top.css') }}" rel="stylesheet">
@yield('crud_css')
</head>
<body>
<div class="container-fluid">
@yield('crud_konten')
</div>
<script src="{{ asset('libs/jquery/dist/jquery.min.js') }}"></script>
<script src="{{ asset('libs/bootstrap/dist/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('libs/chosen/chosen.jquery.min.js') }}"></script>
<script src="{{ asset('libs/bootstrap-datepicker/js/bootstrap-datepicker.js') }}"></script>
@yield('crud_js')
</body>
</html>
最小代码示例
创建资源路由
Route::resource('article', 'ArticleCrud');
然后创建控制器
<?php
namespace App\Http\Controllers;
use Timenz\Crud\Crud;
class ArticleCrud extends Crud{
protected function run(){
$this->init('article', 'crud_master', []);
return true;
}
}
文档
初始化
[必填] 主要初始化
// parameter => table name, master blade and parameter for master blade
$this->init('users');
标题
设置 CRUD 标题 //参数 => CRUD 标题 $this->setTitle('文章 CRUD');
不允许
限制 CRUD 的权限
//parameter L = list
$this->disAllow('LCREDSXO');
列
指定索引页面上要显示的字段。
//parameter => array of fields
$this->columns(array(
'title',
));
验证规则
指定验证规则,在此验证中使用的规则与默认 Laravel 验证规则相同,您可以从 Laravel 文档 获取参考。
$this->validateRules(array(
'title' => 'required',
));
字段
指定创建、编辑和读取页面上的字段。
$this->fields(array(
'title',
));
显示为
修改字段标题
$this->displayAs('title', 'The Title');
创建字段
指定创建页面上的字段
$this->createFields(array(
'title',
));
编辑字段
指定编辑页面上的字段
$this->editFields(array(
'title',
));
读取字段
指定读取页面上的字段
$this->readFields(array(
'title',
));
where
使用 SQL where 过滤可见数据
//parameter => field, condition, value
$this->where('id', '=', 1);
设置连接
设置 1-n 数据库关系,此功能仅可用于引用另一个表的字段 'id' 的关系,例如初始表中的 'id_user' 字段引用目标表中的 'id' 字段。
// parameter
// 1. field from initial table that refers to target table
// 2. another table that want to join to
// 3. field name from refered table that want to set visible on initial field
// 4. 'where' array to limit join data
$this->setJoin('id_user', 'users', 'full_name');
排序
设置列表数据的排序
//parameter 1. field name, 2. sort (asc/desc)
$this->orderBy('id', 'asc');
回调列
设置列表数据中的自定义列值
$this->callbackColumn('field_name', function($row, $val){
return number_format($val);
});
回调保存前
在保存数据之前提供一些操作
$this->callbackBeforeSave(function($post_data){
$post_data['password'] = Hash::make($post_data['password']);
return $post_data;
});
回调更新前
在更新数据之前提供一些操作
$this->callbackBeforeUpdate(function($post_data){
$post_data['password'] = Hash::make($post_data['password']);
return $post_data;
});
添加动作
添加除读取、编辑和删除之外的自定义动作
addAction('Action', 'btn btn-success', function($row_data, $id){
return url('action/'.$id);
})
添加外部链接
添加静态链接到 CRUD 页面
addExternalLink('Custom Link', url('link'));
更改类型
默认情况下,包将根据表定义中的类型设置字段类型,但我们可以将字段类型更改为其他自定义字段类型。此函数有三个参数。
- 字段名
- 更改类型
- 更改类型选项数组
为了防止编码错误,我创建了两个类来指定可用的更改类型和更改类型选项参数。
更改类型选项
这是更改类型函数的第三个参数,这里有一些可用的更改类型选项
- value 或 ChangeTypeOption::VALUE,字段的默认值,例如您可以看到隐藏字段类型
- allow_update,如果您不指定此选项为 true,则编辑页面将不会更改此字段的值
- target_dir,用于 image 和 file 以设置在公共目录中保存文件的目录
- select_option,字段 enum 和 select 类型的选项列表
隐藏
隐藏字段
$this->changeType('field_name', 'hidden', ['value' => 1]);
//or
$this->changeType('field_name', ChangeType::HIDDEN, [ChangeTypeOption::VALUE => 1]);
可用选项是 'value' 和
货币
带有数字格式的字段类型
$this->changeType('field_name', 'money');
多行文本框
$this->changeType('field_name', 'textarea');
枚举
下拉/选择字段类型
$this->changeType('field_name', 'enum', ['select_option' => ['yes', 'no'] ]);
选择
下拉/选择字段类型
$option = array(
'0' => 'yes',
'1' => 'no'
);
$this->changeType('nama_field', 'enum', $option);
$this->changeType('field_name', 'enum', ['select_option' => ['yes', 'no'] ]);