2017-04-06 22 views

回答

0

如果编辑漂亮打印的JSON足以满足您的需求,那么创建自定义表单域和数据转换器,将JSON格式化为漂亮的模板视图打印表单,并在提交表单时返回紧凑的JSON。下面示出的解决方案是基于的Symfony 4.

JSON表单字段类型的目录结构和系统:

<?php 
namespace App\Form\Type; 

use App\Form\DataTransformer\JsonToPrettyJsonTransformer; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\TextareaType; 
use Symfony\Component\Form\FormBuilderInterface; 

class JsonType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 
     $builder->addViewTransformer(new JsonToPrettyJsonTransformer()); 
    } 

    public function getParent() 
    { 
     return TextareaType::class; 
    } 
} 

数据变压器:

<?php 
namespace App\Form\DataTransformer; 

use Symfony\Component\Form\DataTransformerInterface; 

class JsonToPrettyJsonTransformer implements DataTransformerInterface 
{ 
    public function transform($value) 
    { 
     return json_encode(json_decode($value), JSON_PRETTY_PRINT); 
    } 

    public function reverseTransform($value) 
    { 
     return json_encode(json_decode($value)); 
    } 
} 

易于管理配置:

easy_admin: 
    entities: 
     EntityName: 
      class: App\Entity\EntityName 
      form: 
       fields: 
        # other fields 
        - { property: 'propertyName', type: 'App\Form\Type\JsonType' } 

更复杂的编辑器可以以相同的方式创建,但可能重写widget模板和自定义样式加上javascripts。

相关问题