helori/ laravel-crudui
用于在 Eloquent 模型上执行 CRUD 操作的 UI 工具
dev-master
2023-05-22 14:48 UTC
Requires
- php: >=5.5.9
This package is auto-updated.
Last update: 2024-09-22 17:35:47 UTC
README
用于在 Eloquent 模型上执行 CRUD 操作的 UI 工具
安装和设置
composer require helori/laravel-crudui
配置您的应用程序
// config/app.php 'providers' => [ ... Helori\LaravelCrudui\CruduiServiceProvider::class, ];
发布并运行迁移
php artisan vendor:publish --provider="Helori\LaravelCrudui\CruduiServiceProvider" --tag="migrations" php artisan migrate
安装前端依赖项
bower init bower install jquery --save bower install bootstrap --save bower install angular --save bower install jquery-ui --save bower install jqueryui-touch-punch --save bower install font-awesome --save bower install tinymce --save
更新您的 gulpfile
elixir(function(mix) { mix.sass( ["../../../vendor/helori/laravel-crudui/src/assets/sass/**/*.scss"], "public/css/crudui.css" ).copy( ["bower_components/font-awesome/fonts"], "public/build/fonts" ).scripts( [ "bower_components/jquery/dist/jquery.min.js", "bower_components/bootstrap/dist/js/bootstrap.min.js", "bower_components/angular/angular.min.js", "bower_components/jquery-ui/jquery-ui.min.js", "bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.min.js" "bower_components/tinymce/tinymce.min.js", "vendor/helori/laravel-crudui/src/assets/js/**/*.js" ], "public/js/crudui.js", "." ).styles( [ "bower_components/bootstrap/dist/css/bootstrap.css", "bower_components/font-awesome/css/font-awesome.css", "bower_components/jquery-ui/themes/base/jquery-ui.min.css", "public/css/crudui.css" ], "public/css/crudui.css", "." ).version( [ "public/js/crudui.js", "public/css/crudui.css", ] ); });
如果尚未完成,请通过内置的 laravel package.json 安装 gulp 和 elixir,然后运行 Gulp
sudo npm install gulp
如何使用
使用此模块有两种方法
- 使用配置文件来定义要管理的模型。
- 通过继承 CrudBaseController 创建自己的控制器。
使用配置文件
发布配置文件
php artisan vendor:publish --provider="Helori\LaravelCrudui\CruduiServiceProvider" --tag="config"
定义要管理的模型
// config/laravel-crudui.php return [ 'models' => [ 'articles' => [ 'model_class' => \App\Article::class, 'page_name' => 'grarticlesoups', 'route_url' => '/crud/articles', 'menu_title' => 'Articles', 'list_title' => 'Articles list', 'edit_title' => 'Edit article', 'add_text' => 'Add article', 'sort_by' => 'id', 'sort_dir' => 'asc', 'sortable' => false, 'limit' => 10, 'fields' => [ ['type' => 'text', 'name' => 'title', 'title' => 'Title', 'list' => true, 'edit' => true, 'filter' => true], 'filter' => false], ['type' => 'checkbox', 'name' => 'published', 'title' => 'Published', 'list' => false, 'edit' => true, 'filter' => false], ['type' => 'textarea', 'name' => 'content', 'title' => 'COntent', 'list' => false, 'edit' => true, 'filter' => false], ] ], ... ], ];
创建相应的表
php artisan make:migration create_articles_table
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateArticlesTable extends Migration { public function up() { Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('title'); $table->text('content'); $table->boolean('published')->default(1); }); } public function down() { Schema::dropIfExists('articles'); } }
php artisan migrate
为您创建 Eloquent 模型
php artisan make:model Article.php
// app/Article.php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $table = 'articles'; protected $dates = ['created_at', 'updated_at']; public $timestamps = true; protected $hidden = []; protected $guarded = []; }
将以下通用路由列表添加到您的 routes.php 文件中。请注意,路由可以根据需要自定义,但必须包含此顺序的 {model} 和可选的 {id} 参数。此外,请确保选择的路径与您的菜单视图(见下文)中使用的路径相匹配。
// app/Http/routes.php Route::get('/crud/{model}/items', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@getItems')); Route::get('/crud/{model}/create-item', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@getCreateItem')); Route::post('/crud/{model}/store-item', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@postStoreItem')); Route::get('/crud/{model}/edit-item/{id}', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@getEditItem')); Route::post('/crud/{model}/update-item/{id}', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@postUpdateItem')); Route::get('/crud/{model}/delete-item/{id}', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@getDeleteItem')); Route::post('/crud/{model}/update-position', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudController@postUpdatePosition')); Route::get('/ru/{model}/items', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudSingleController@getItems')); Route::post('/ru/{model}/update-item/{id}', array('uses' => '\Helori\LaravelCrudui\Controllers\CrudSingleController@postUpdateItem'));
创建访问每个表管理的链接(例如在导航栏中)
// e.g. : resources/views/menu.blade.php @foreach(config('laravel-crudui.models') as $key => $model) <li class="<% (isset($page_name) && $page_name == $model['page_name']) ? ' active' : '' %>"> <a href="<% $model['route_url'] %>/items"><% $model['menu_title'] %></a> </li> @endforeach
继承 CrudBaseController
如果您的控制器继承自 CrudBaseController,请通过添加来创建路由
$models = ['medias', 'articles']; foreach($models as $model) { $controller = ucfirst(camel_case($model)).'Controller'; Route::get('/crudbase/'.$model.'/items', array('uses' => $controller.'@getItems')); Route::get('/crudbase/'.$model.'/create-item', array('uses' => $controller.'@getCreateItem')); Route::post('/crudbase/'.$model.'/store-item', array('uses' => $controller.'@postStoreItem')); Route::get('/crudbase/'.$model.'/edit-item/{id}', array('uses' => $controller.'@getEditItem')); Route::post('/crudbase/'.$model.'/update-item/{id}', array('uses' => $controller.'@postUpdateItem')); Route::get('/crudbase/'.$model.'/delete-item/{id}', array('uses' => $controller.'@getDeleteItem')); Route::post('/crudbase/'.$model.'/update-position', array('uses' => $controller.'@postUpdatePosition')); }