Просмотр исходного кода

Refactor the ShowBuilder::add to match FormBuilder::add method

Thomas Rabaix 14 лет назад
Родитель
Сommit
482703c6b9
3 измененных файлов с 15 добавлено и 21 удалено
  1. 7 6
      Builder/ORM/ShowBuilder.php
  2. 6 5
      Builder/ShowBuilderInterface.php
  3. 2 10
      Show/ShowMapper.php

+ 7 - 6
Builder/ORM/ShowBuilder.php

@@ -26,12 +26,15 @@ class ShowBuilder implements ShowBuilderInterface
         return new FieldDescriptionCollection;
     }
 
-    public function addField(FieldDescriptionCollection $list, FieldDescriptionInterface $fieldDescription)
+    public function addField(FieldDescriptionCollection $list, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin)
     {
-        if (!$fieldDescription->getType()) {
-            return false;
+        if ($type == null) {
+            throw new \RunTimeException('type guesser on ShowBuilder is not yet implemented');
         }
 
+        $this->fixFieldDescription($admin, $fieldDescription);
+        $admin->addShowFieldDescription($fieldDescription->getName(), $fieldDescription);
+
         switch($fieldDescription->getMappingType()) {
             case ClassMetadataInfo::MANY_TO_ONE:
             case ClassMetadataInfo::MANY_TO_MANY:
@@ -50,12 +53,10 @@ class ShowBuilder implements ShowBuilderInterface
      *
      * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
      * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
-     * @param array $options
      * @return void
      */
-    public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription, array $options = array())
+    public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription)
     {
-        $fieldDescription->mergeOptions($options);
         $fieldDescription->setAdmin($admin);
 
         if ($admin->getModelManager()->hasMetadata($admin->getClass())) {

+ 6 - 5
Builder/ShowBuilderInterface.php

@@ -28,17 +28,18 @@ interface ShowBuilderInterface
     /**
      * @abstract
      * @param \Sonata\AdminBundle\Admin\FieldDescriptionCollection $list
-     * @param \Sonata\AdminBundle\Admin\FieldDescription $fieldDescription
+     * @param null $type
+     * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
+     * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
      * @return void
      */
-    function addField(FieldDescriptionCollection $list, FieldDescriptionInterface $fieldDescription);
+    function addField(FieldDescriptionCollection $list, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin);
 
     /**
      * @abstract
      * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
-     * @param \Sonata\AdminBundle\Admin\FieldDescription $fieldDescription
-     * @param array $options
+     * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
      * @return void
      */
-    function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription, array $options = array());
+    function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription);
 }

+ 2 - 10
Show/ShowMapper.php

@@ -41,7 +41,7 @@ class ShowMapper
      * @param array $fieldDescriptionOptions
      * @return \Sonata\AdminBundle\Datagrid\ListMapper
      */
-    public function add($name, array $fieldDescriptionOptions = array())
+    public function add($name, $type = null, array $fieldDescriptionOptions = array())
     {
         if ($name instanceof FieldDescriptionInterface) {
 
@@ -56,20 +56,12 @@ class ShowMapper
                 $fieldDescriptionOptions
             );
 
-            $this->showBuilder->fixFieldDescription($this->admin, $fieldDescription, $fieldDescriptionOptions);
-            $this->admin->addShowFieldDescription($name, $fieldDescription);
-
-        } else if (is_string($name) && $this->admin->hasShowFieldDescription($name)) {
-            $fieldDescription = $this->admin->getShowFieldDescription($name);
         } else {
             throw new \RuntimeException('invalid state');
         }
 
         // add the field with the FormBuilder
-        $this->showBuilder->addField(
-            $this->list,
-            $fieldDescription
-        );
+        $this->showBuilder->addField($this->list, $type, $fieldDescription, $this->admin);
 
         return $this;
     }