2013-07-24 3 views
0

Workaround: К настоящему времени cnhanging form parent из формы в текст сделал трюк.Получить свойство_path в настраиваемом поле типа

Я только что создал пользовательский тип поля, родитель которого является формой.

Кто-нибудь знает, как я могу получить правильный property_path? Я имею в виду, внутри MyFieldType я хотел бы получить доступ к свойству MyFormType, который использовал поле my_field_type, чтобы я мог динамически установить правильный путь property_path.

Вот мой пользовательский тип поля. Внутри следующего класса хотелось бы динамически установить свойство Type Type, которое использует значение ColorPaletteField как valuey_path.

 


    namespace WE\BobbyWebAppBundle\Form\Field; 

    use Symfony\Component\Form\AbstractType; 
    use Symfony\Component\Form\FormView; 
    use Symfony\Component\Form\FormInterface; 
    use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
    use Symfony\Component\PropertyAccess\PropertyAccess; 
    use Symfony\Component\Form\FormBuilderInterface; 
    use Symfony\Component\Form\Extension\Core\EventListener\TrimListener; 

    class ColorPaletteField extends AbstractType 
    { 
     public function setDefaultOptions(OptionsResolverInterface $resolver) 
     { 
      $resolver->setDefaults(array(
        'mapped'   => true, 
        'error_bubbling' => false, 
        'colors'   => array() 
       ) 
      ); 
     } 

     /** 
     * Pass the help to the view 
     * 
     * @param FormView $view 
     * @param FormInterface $form 
     * @param array $options 
     */ 
     public function buildView(FormView $view, FormInterface $form, array $options) 
     { 
      $parentData = $form->getParent()->getData(); 

      if(null !== $parentData) 
      { 
       $accessor  = PropertyAccess::getPropertyAccessor(); 
       $defaultColor = $accessor->getValue($parentData, 'calendar_color'); 
      } 
      else { $defaultColor = null; } 

      if(array_key_exists('colors', $options)) 
      { 
       $colors = $options[ 'colors' ]; 
      } 
      else { $colors = array(); } 

      $view->vars[ 'colors' ]   = $colors; 
      $view->vars[ 'defaultColor' ] = $defaultColor; 
     } 

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

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

Благодаря передовой,

+0

пожалуйста показать нам некоторый пример кода –

+0

я просто редактироваться и разоблачил используется код выше. Благодарю. – user846226

ответ

0

Вы можете передать его в настройках. Первый набор по умолчанию в пользовательском поле

$resolver->setDefaults(array(
    'mapped'   => true, 
    'error_bubbling' => false, 
    'colors'   => array() 
    'property_name'  => 'calendar_color' 
)); 

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

->add('some_name', 'color_palette', array('property_name' => 'some_name')); 
+0

Спасибо, забыл, я уже думал об обходном пути, который вы предлагаете, но я ищу настоящее и опрятное решение. Прямо сейчас я сменил родителя с формы на текст и сделал трюк. – user846226

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