【问题标题】:Showing different entities in Sonata Admin list view在 Sonata Admin 列表视图中显示不同的实体
【发布时间】:2017-04-15 14:19:40
【问题描述】:

我有这个实体,它包含entityName 属性和entityId 属性:

    /**
     * @var string
     *
     * @ORM\Column(name="entityName", type="string", length=255)
     */
    private $entityName;

    /**
     * @var integer
     * @ORM\Column(name="entityId", type="integer")
     */
    private $entityId;

我不想使用__toString() 函数显示此实体,而是想实际返回具有名称和ID 的实体。并在奏鸣曲管理列表视图中显示。

现在,这里是__toString

public function __toString()
{
    return $this->entityName . ":" . $this->entityId;
}

应该返回类似:

public function __toString()
{
    return $em->getRepository($this->entityName)->find($this->entityId);
}

我希望我已经很好地描述了我的问题。 tnx

【问题讨论】:

    标签: php entity-framework symfony doctrine-orm sonata-admin


    【解决方案1】:

    一种解决方法是为奏鸣曲使用自定义列表块。

    1. create a new twig filter 称为entityFilter,此过滤器会将奏鸣曲管理对象的 FQCN 转换为奏鸣曲生成的可读路由名称。喜欢admin_blablabla_show:

      public function entityFilter($entityName)
      {
          $str = str_replace('\\', '_', $entityName);
          $str = str_replace('Bundle', '', $str);
          $str = str_replace('_Entity', '', $str);
          $str = 'Admin' . $str . '_Show';
          return strtolower($str);
      }
      
      public function getName()
      {
          return 'my_extension';
      }
      
    2. 在您的管理类中,将所需字段的模板设置为新的树枝模板:

          ->add('orderItems', null, array(
              'template' => 'AcmeBundle::order_items_list.html.twig'
          ))
      
    3. 在您的新树枝模板 (order_items_list.html.twig) 中:

      {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
      {% block field %}
      <div>
          {% for item in object.orderItems %}
              {% if entity(item.entityName) == 'admin_first_entity_show' %}
                  {% set foo = 'Apple ID' %}
              {% elseif entity(item.entityName) == 'admin_second_entity_show' %}
                  {% set foo = 'Device Accessory' %}
              {% else %}
                  {% set foo = 'Not defiend' %}
              {% endif %}
      
              <a target="_blank" class="btn btn-default btn-xs" href="{{ path(entity(item.entityName), {'id': item.entityId}) }}"><i class="fa fa-external-link"></i> {{ foo }}</a>
          {% endfor %}
      </div>
      {% endblock %}
      

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2016-12-18
      • 2016-07-09
      • 2015-05-15
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多