2013-12-21 2 views
0

Предположим, у меня есть собственный тип формы symfony2, определенный как служба, я хочу получить свое определенное значение по умолчанию в этом настраиваемом виде формы в моем контроллере.Получить значение по умолчанию для преобразователя из специального типа формы symfony2, определенного как служба

Например, я хочу отфильтровать свои данные на основе значения, выбранного в этом настраиваемом виде формы.

Я уже проверяю класс AbstractType, но нет никакой функции для получения значения по умолчанию для распознавателя, определенного из моего пользовательского типа формы.

Я не хочу использовать объект для хранения этих простых данных, это всего лишь 3 строки данных.

<?php 

namespace Jariff\AdminBundle\Form\CustomType; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class JariffSalutationType extends AbstractType 
{ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'empty_value' => '---', 
      'choices'  => array(
       'Mr.' => 'Mr.', 
       'Mrs.' => 'Mrs.', 
       'Ms.' => 'Ms.', 
      ))); 
    } 

    public function getParent() 
    { 
     return 'choice'; 
    } 

    public function getName() 
    { 
     return 'jariff_salutation'; 
    } 
} 

Определение сервиса

services: 

    jariff_type_salutation: 

     class: Jariff\AdminBundle\Form\CustomType\JariffSalutationType 

     tags: 

      - { name: form.type, alias: jariff_salutation } 

Пример использования

$salutation = $this->get('jariff_type_salutation'); 
$entities = $em->getRepository('JariffMemberBundle:Member')->findBy(array('salutation' => $salution[1])); 

Спасибо.

ответ

0

Не напрямую. Вместо этого вы должны указать выбор приветствия в качестве параметра (salutations) в свой config.yml и передать этот параметр в ваш тип формы, следующий за this recipe. Затем, в контроллере, получить массив вариантов с (после вашего примера использования):

$this->container->getParameter('salutations')[1]; 

Вы также можете добавить public static function getSalutations() к вашему типу формы, который возвращает массив вариантов и назвать его в setDefaultOptions:

$resolver->setDefaults(array(
    'empty_value' => '---', 
    'choices'  => self::getSalutations() 
)); 
+0

Интересный ответ, записывающий эту 3 строку данных в виде формы и в файле конфигурации имеет одинаковые усилия. Хотя новому программисту в команде требуется больше файлов для открытия при проверке этой функции. Также я редко проверяю конфигурацию yml, за исключением установки нового пакета или начальной настройки проекта. Я все еще жду решения с меньшими усилиями, прежде чем отмечать ваш ответ. Благодарю. – ardianys

Смежные вопросы