timenz/crud

此包最新版本(dev-master)没有可用的许可信息。

dev-master 2017-06-23 16:38 UTC

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图片 字段类型的支持,请添加以下两个从 guillermomartinezkevbaldwyn 分叉的存储库,并更新 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'));

更改类型

默认情况下,包将根据表定义中的类型设置字段类型,但我们可以将字段类型更改为其他自定义字段类型。此函数有三个参数。

  1. 字段名
  2. 更改类型
  3. 更改类型选项数组

为了防止编码错误,我创建了两个类来指定可用的更改类型和更改类型选项参数。

更改类型选项

这是更改类型函数的第三个参数,这里有一些可用的更改类型选项

  • value 或 ChangeTypeOption::VALUE,字段的默认值,例如您可以看到隐藏字段类型
  • allow_update,如果您不指定此选项为 true,则编辑页面将不会更改此字段的值
  • target_dir,用于 imagefile 以设置在公共目录中保存文件的目录
  • select_option,字段 enumselect 类型的选项列表

隐藏

隐藏字段

$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'] ]);