marmelab / ng-admin-generator-bundle
一个用于基于 LemonRestBundle API轻松生成 ng-admin 配置文件的包
Requires
- php: >=5.4
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.4
- stanlemon/rest-bundle: 0.8.*
- symfony/browser-kit: 2.*
- symfony/finder: 2.*
- symfony/framework-bundle: 2.*
- symfony/twig-bundle: 2.*
- symfony/yaml: 2.*
This package is not auto-updated.
Last update: 2020-01-24 15:25:38 UTC
README
存档仓库 此代码不再维护。您可以自由地分叉它,但请自担风险。 |
NgAdminGeneratorBundle 
你喜欢 StanLemonRestBundle 因为它让基于 Doctrine 实体的 REST API 变得易如反掌?你喜欢 ng-admin 因为你喜欢一个由 JavaScript 驱动的管理面板消费 REST API 的想法?那么,你会喜欢 NgAdminGeneratorBundle,这是一个基于 Doctrine 驱动的 REST API 的 ng-admin 的引导包!
安装
设置包
使用此包在您的项目中非常简单,多亏了 composer
composer require marmelab/ng-admin-generator-bundle
然后,将其注册到您的 AppKernel.php
文件中。NgAdminGeneratorBundle 应仅在开发中使用
class AppKernel extends Kernel { public function registerBundles() { // ... if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new \marmelab\NgAdminGeneratorBundle\marmelabNgAdminGeneratorBundle(); } // ... } }
不再需要配置,现在您可以开始使用了!
ng-admin 模板示例
这是一个用于渲染您喜欢的管理面板的 Twig 模板
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Administration Panel</title> <link rel="stylesheet" href="{{ asset('components/ng-admin/build/ng-admin.min.css') }}"/> </head> <body ng-app="myApp"> <script src="{{ asset('components/angular/angular.min.js') }}"></script> <script src="{{ asset('components/ng-admin/build/ng-admin.min.js') }}"></script> <script src="{{ asset('ngadmin.conf.js') }}"></script> <div ui-view></div> </body> </html>
如果您得到了一个空白页,请确保您已正确设置了 ng-app
和 ui-view
属性。
生成您的 ng-admin 配置
此包仅向您的应用程序添加了 ng-admin:configuration:generate
命令。默认情况下,它输出一个基于 StanLemonRestBundle 定义的 REST API 的 JavaScript 配置到 STDOUT。您可以将 STDOUT 重定向到您选择的文件
./app/console ng-admin:configuration:generate > public/js/ng-admin-config.js
提示:感谢 Symfony2 控制台组件,您可以对命令名称进行部分截断并调用 ng-admin:c:g
命令!
配置示例
这是一个自动生成的配置示例,基于 stanlemon/rest-demo-app 演示应用程序。该应用程序设置了与官方 ng-admin 演示应用程序 相同的实体,即帖子、评论和标签。生成器仅使用 实体映射 来更好地了解要使用哪些字段。
var app = angular.module('myApp', ['ng-admin']); // Deal with query parameters expected by StanLemon bundle app.config(function(RestangularProvider) { RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params) { if (operation == "getList") { // custom pagination params params._start = (params._page - 1) * params._perPage; params._end = params._page * params._perPage; delete params._page; delete params._perPage; // custom sort params if (params._sortField) { params._orderBy = params._sortField; params._orderDir = params._sortDir; delete params._sortField; delete params._sortDir; } // custom filters if (params._filters) { for (var filter in params._filters) { params[filter] = params._filters[filter]; } delete params._filters; } } return { params: params }; }); }); /* Define a `config` block for each entity, allowing to split configuration across several files. */ app.config(function($provide, NgAdminConfigurationProvider) { $provide.factory("PostAdmin", function() { var nga = NgAdminConfigurationProvider; var post = nga.entity('post'); // Dashboard (as list) won't display referenced list of items. post.dashboardView() .fields([ nga.field('id', 'number'), nga.field('title', 'string'), nga.field('body', 'text'), // We limit to 3 number of fields displayed on dashboard ]); post.listView() .fields([ nga.field('id', 'number'), nga.field('title', 'string'), nga.field('body', 'text'), // Take more meaningful field. Here, use `name` instead of `id` nga.field('tags', 'reference_many') .targetEntity(nga.entity('tag')) .targetField(nga.field('name')), ]) .listActions(['show', 'edit', 'delete']); post.creationView() .fields([ // Do not display id: we don't have any yet nga.field('title', 'string'), nga.field('body', 'text'), nga.field('tags', 'reference_many') .targetEntity(nga.entity('tag')) .targetField(nga.field('name')), // No referenced_list either, as that's a brand new entity ]); post.editionView() .fields([ nga.field('id', 'number').readOnly(), // don't modify id nga.field('title', 'string'), nga.field('body', 'text'), nga.field('tags', 'reference_many') .targetEntity(nga.entity('tag')) .targetField(nga.field('name')), nga.field('comments', 'referenced_list') .targetEntity(nga.entity('comment')) .targetReferenceField('post_id') .targetFields([ nga.field('id', 'number'), nga.field('body', 'text'), nga.field('created_at', 'date'), ]), ]); /* To ease configuration per view, we repeat every field every time. If you want to display same fields across views, you can use for instance `post.editView().fields()` to get edition fields. */ post.showView() .fields([ nga.field('id', 'number'), nga.field('title', 'string'), nga.field('body', 'text'), nga.field('tags', 'reference_many') .targetEntity(nga.entity('tag')) .targetField(nga.field('name')), nga.field('comments', 'referenced_list') .targetEntity(nga.entity('comment')) .targetReferenceField('post_id') .targetFields([ nga.field('id', 'number'), nga.field('body', 'text'), nga.field('created_at', 'date'), ]), ]); return post; }); }); // Same config block for comments // Same config block for tags app.config(function(NgAdminConfigurationProvider, PostAdminProvider, CommentAdminProvider, TagAdminProvider) { var admin = NgAdminConfigurationProvider .application('') .baseApiUrl(location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + '/api/') admin .addEntity(PostAdminProvider.$get()) .addEntity(CommentAdminProvider.$get()) .addEntity(TagAdminProvider.$get()) ; NgAdminConfigurationProvider.configure(admin); });
贡献
您对此包使用的反馈非常有价值:不要犹豫,为任何问题或疑问 打开 GitHub 问题。
欢迎所有贡献。新应用或选项应使用 phpunit
命令进行测试。