1 Отредактировано Виктор (2009-07-10 14:29:37)

Тема: [решен] Не срабатывает setDefault метод для виджета

виджет типа sfWidgetFormPropelChoice
не срабатывает  $this->widgetSchema['section_id']->setDefault метод непонятно почему
Для других виджетов работает
Кто нибудь сталкивался с такой проблемой?

Прописываю в тупую уже

 $this->widgetSchema['section_id'] = new sfWidgetFormPropelChoice(array('model' => 'OfferSection','default' =>1973, 'add_empty' => false));

Не помогает
В чем фокус?

2

Re: [решен] Не срабатывает setDefault метод для виджета

посмотрите тут: http://groups.google.com/group/symfony- … 5f3969162b

3

Re: [решен] Не срабатывает setDefault метод для виджета

Так помогло
Но явный глюк здесь есть

4

Re: [решен] Не срабатывает setDefault метод для виджета

Никаких глюков в этом методе нет.

Метод sfWidgetFormPropelChoice принимает следующие параметры:

Available options:

* model: The model class (required)
* add_empty: Whether to add a first empty value or not (false by default) If the option is not a Boolean, the value will be used as the text value
* method: The method to use to display object values (__toString by default)
* key_method: The method to use to display the object keys (getPrimaryKey by default)
* order_by: An array composed of two fields:
* The column to order by the results (must be in the PhpName format) * asc or desc * criteria: A criteria to use when retrieving objects
* connection: The Propel connection to use (null by default)
* multiple: true if the select tag must allow multiple selections
* peer_method: The peer method to use to fetch objects

5

Re: [решен] Не срабатывает setDefault метод для виджета

sfWidgetFormPropelChoice( array('add_empty'=>'Default Value') );

Судя по документации можно так сделать default/smile

6

Re: [решен] Не срабатывает setDefault метод для виджета

pilot пишет:

Никаких глюков в этом методе нет.

Метод sfWidgetFormPropelChoice принимает следующие параметры

Available options

* model: The model class (required)
* add_empty: Whether to add a first empty value or not (false by default) If the option is not a Boolean, the value will be used as the text value
* method: The method to use to display object values (__toString by default)
* key_method: The method to use to display the object keys (getPrimaryKey by default)
* order_by: An array composed of two fields
* The column to order by the results (must be in the PhpName format) * asc or desc * criteria: A criteria to use when retrieving objects
* connection: The Propel connection to use (null by default)
* multiple: true if the select tag must allow multiple selections
* peer_method: The peer method to use to fetch objects

                        451 degrees Fahrenheit

Глюк в том что  не срабатывает $this->widgetSchema['section_id']->setDefault, а должен

7

Re: [решен] Не срабатывает setDefault метод для виджета

setDefault прекрасно работает,

как пример

$this->widgetSchema['language'] = new sfWidgetFormPropelChoice(
      array(
        'model' => 'psLanguage',
        'multiple'  => true
      ));

$this->widgetSchema['language']->setDefault(psLanguagePeer::getUserLanguages());

отлично работающая конструкция.

версия симфони 1.2.7

8

Re: [решен] Не срабатывает setDefault метод для виджета

Что-то у меня не получилось установить setDefault для sfWidgetFormPropelChoice при схеме многие ко многим, симфа 1.4. По ходу нельзя это сделать default/sad

9

Re: [решен] Не срабатывает setDefault метод для виджета

думаю, что можно, давай код

10

Re: [решен] Не срабатывает setDefault метод для виджета

Классическая ситуация

public function configure()
      {
        // ...

    $this->setWidgets(array(
      'lang'  => new sfWidgetFormPropelChoice(array(
        'model'     => 'Languages',
        'multiple' => true
      )));

     $this->setDefault('lang', 1);
//     $this->setDefault('lang', array(1);
//   $this->setDefault('lang', array(1, 3);

что только не пробывал, разные варианты. И гугль говорит не получится... Ерунда какая-то

11

Re: [решен] Не срабатывает setDefault метод для виджета

Разобрался, все заработало, НО!

Проблема была в том, что в базовом классе был метод public function updateDefaultsFromObject(), который задавал значения для объекта для этого поля, и запускался метод в момент инициализации объекта, т.е. после всех configure и setup. Поэтому решение получилось такое, надо добавить свой метод в форме:

  public function updateDefaultsFromObject()
  {
    parent::updateDefaultsFromObject();

    if($this->isNew())
    {
      $this->setDefault('lang', array(1));
    }
  }