Отображаемое имя вместо значения БД в представлении списка SonataAdmin

У меня проблема, когда я пытаюсь перечислить запись из БД, так как я получаю значение, хранящееся в строке, которая является целым числом, но вместо этого мне нужна строка. Как я работаю с формой? В этом случае:

protected function configureFormFields(FormMapper $form) {
    $form
            ->add('no_order', null, array('label' => 'No. Order'))
            ->add('company', 'entity', array('class' => 'PL\CompanyBundle\Entity\Company', 'label' => 'Cliente'))
            ->add('business_case', null, array('label' => 'BC'))
            ->add('charge_status', 'choice', array('choices' => array(
                    "empty_value" => "Seleccione una opción",
                    "0" => "Ninguno",
                    "1" => "Proceso de Fabricacion",
                    "2" => "Pickup en destino",
                    "3" => "A la espera de recojo por cliente",
                    "4" => "Carga en transito",
                    "5" => "Carga arribada",
                    "6" => "En proceso de aduana",
                    "7" => "Entregado a cliente",
                    "8" => "En bodega"
                ), "required" => true, 'label' => 'Estado de la carga'))
            ->add('eta', null, array('label' => 'ETA', 'widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')))
            ->add('etd', null, array('label' => 'ETD', 'widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')))
            ->add('transport_media', 'choice', array('choices' => array("empty_value" => "Seleccione una opción", "0" => "EXW", "1" => "Maritimo", "2" => "Aereo"), "required" => true, 'label' => 'Via de Transporte'))
            ->add('incoterm', 'choice', array('choices' => array(
                    "empty_value" => "Seleccione una opción",
                    "0" => "Ninguno",
                    "1" => "EWX",
                    "2" => "FOB",
                    "3" => "CIF",
                    "4" => "DDP"
                ), "required" => true, 'label' => 'Incoterm'))
            ->add('comments', null, array('label' => 'Comentarios'))
            ->with('Documentos')
            ->add('medias', 'sonata_type_collection', array(
                'required' => false), array(
                'edit' => 'inline',
                'inline' => 'table',
                'sortable' => 'position'))
            ->end();
}

Я определяю charge_status (эквивалент BC в представлении) как выбор, как я могу показать строку, а не значение в представлении списка? См. прикрепленное изображение для визуализации проблемы

введите здесь описание изображения


person Reynier    schedule 18.02.2014    source источник
comment
empty_value не должен находиться в массиве вариантов, а должен быть отдельным параметром в основном массиве параметров.   -  person Nicolai Fröhlich    schedule 18.02.2014
comment
@nifr спасибо, я исправил это   -  person Reynier    schedule 18.02.2014
comment
Странное поведение... Пробовали ли вы переключать ключи и значения в этих массивах вариантов? Где именно вы их берете из базы данных?! я не могу найти это в вашем коде.   -  person Nicolai Fröhlich    schedule 18.02.2014
comment
@nifr Я не понимаю тебя, не мог бы ты опубликовать пример?   -  person Reynier    schedule 18.02.2014
comment
У вас есть массив вида '1' => 'text string'. Теперь 1 — ключ, а text string — значение. Вы хотите, чтобы в поле выбора отображалось text string вместо 1, верно? просто поменяйте местами ключи и значения массива и сделайте его похожим на 'text string' => '1'. Вы также можете использовать array_flip(array('1' => 'text string' ... .   -  person Nicolai Fröhlich    schedule 18.02.2014


Ответы (1)


Один подход:

определите статический массив в вашей сущности, например:

<?php
class Entity 
{
    public static $chargeStatusList = array(
                "0" => "Ninguno",
                "1" => "Proceso de Fabricacion",
                "2" => "Pickup en destino",
                "3" => "A la espera de recojo por cliente",
                "4" => "Carga en transito",
                "5" => "Carga arribada",
                "6" => "En proceso de aduana",
                "7" => "Entregado a cliente",
                "8" => "En bodega"
            );

    public function getChargeStatusValue()
    {
        return self::$chargeStatus[$this->charge_status];
    }

}

В вашем классе администратора

class YourAdmin extends Admin
{

    ....
    use Path/To/Your/Entity;
    protected function configureListFields(ListMapper $listMapper)
   {
        $listMapper
            ->add('chargeStatusValue', 'string', array('label' => 'Charge status'))

    ;
   }

   protected function configureFormFields(FormMapper $form) 
   {
       ....
       ->add('charge_status', 'choice', array('choices' => Entity::$chargeStatusList));
       ....
   }
}
person waldek_h    schedule 18.02.2014