定制 forci/static-data-bundle 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

forci/static-data-bundle

最新稳定版本:v0.7.1

Composer 安装命令:

composer require forci/static-data-bundle

包简介

Static Data Import for applications that need pre-defined entities with IDs

README 文档

README

composer require forci/static-data-bundle

Add the bundle to your bundles array

new \Forci\Bundle\StaticData\ForciStaticDataBundle(),

Configure your bundles. These are the bundles that have StaticData that needs to be imported

forci_static_data:
    bundles:
        - App
        # Note: Your bundle can be configured as a string or full-blown config.
        # You can also specify your entity manager if not "default" or if you have many
        # For advanced usage, please refer to the Configuration file of this bundle.
        - Api
        -
           bundle: Frontend
           # Note: When looking up classes, this bundle converts slashes to namespace separators
           directory: Some/Directory
           em: some_other_em
        - Admin

The Static Data bundle will look into each bundle's configured directory (StaticData by default) and pick all *Data.php files. Then, if there is a service with an ID equal to the FQCN, or if the class is a subclass of Forci\Bundle\StaticData\StaticData\StaticData, it will be constructed and added to a ``Forci\Bundle\StaticData\StaticData\DataCollection`. Note, that this only happens on-demand and will NOT slow down your application's performance besides having to load another bundle and process its configs.

Usage

By default, you need to place your StaticData files in BundleRootDir/StaticData. Take a look at the below example for a bundle named App (Please notice the missing Bundle suffix! if you're using it, you need to specify the full bundle name in your config, eg AppBundle)

<?php

// src/App/StaticData/RoleData.php

namespace App\StaticData;

use App\Entity\Role;
use Forci\Bundle\StaticData\StaticData\StaticData;

class RoleData extends StaticData {

    public function doLoad() {
        $records = [
            Role::ID_ADMINISTRATOR => [
                'name' => 'Administrator',
                'role' => 'ROLE_ADMIN'
            ],
            Role::ID_TRANSLATOR => [
                'name' => 'Translator',
                'role' => 'ROLE_TRANSLATOR'
            ],
        ];

        foreach ($records as $id => $role) {
            if (!$this->find(Role::class, $id)) {
                $entity = new Role();
                $entity->setId($id);
                $entity->setName($role['name']);
                $entity->setRole($role['role']);
                $this->persist($entity);
            }
        }
    }
}

All you need to do is run the ./bin/console forci_static_data:load command. You can also add this command to your deployment flow. This way, adding new static entities is a breeze. This is especially useful when development happens by multiple developers, in multiple different branches and you want to keep migrations clean. Having multiple branches and doing refactoring in these often leads to unexpected crashes upon deployment to production due to the way DoctrineMigrationsBundle works.

If you would like to import the static data for only one bundle, run ./bin/console forci_static_data:load -b YourBundle or ./bin/console forci_static_data:load --bundle=YourBundle

Advanced Usage

This bundle registers two services:

  • forci_static_data.data_finder - instance of Forci\Bundle\StaticData\StaticData\DataFinder
  • forci_static_data.data_loader - instance of Forci\Bundle\StaticData\StaticData\DataLoader

You can use those to find and/or load your static data in any way you would like - you can embed it in your own commands.

统计信息

  • 总下载量: 10.18k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-01-20