marmelab/ng-admin-generator-bundle

此包已被弃用且不再维护。未建议替代包。

一个用于基于 LemonRestBundle API轻松生成 ng-admin 配置文件的包

安装次数: 2,420

依赖者: 0

推荐者: 0

安全性: 0

星标: 77

关注者: 17

分支: 13

公开问题: 7

类型:symfony-bundle

0.2.0 2015-04-29 16:16 UTC

README

archived 存档仓库
此代码不再维护。您可以自由地分叉它,但请自担风险。

NgAdminGeneratorBundle Build Status

你喜欢 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-appui-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 命令进行测试。

许可证

NgAdminGeneratorBundle 在 MIT 许可证 下授权,由 marmelab 提供。