Показывать имя пользователя вместо идентификатора в sfWidgetFormInputText - PullRequest
0 голосов
/ 08 декабря 2011

Это, вероятно, простой вопрос, но, поскольку я новичок в Symfony, это все еще немного сбивает с толку.

У меня есть таблица Podcast, в которой есть столбец user_id, связанный с моей таблицей sfGuardUser, в которой есть столбец id. (Пользователь создает подкаст, и его идентификатор автоматически сохраняется в таблице подкастов, creator_id столбец)

Затем у меня есть PodcastForm, где по умолчанию доктрина создала этот виджет в BasePodcastForm.class.php:

'creator_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('sfGuardUser'), 'add_empty' => false)),

Что создает раскрывающийся список в форме подкаста.

В моем PodcastForm.php у меня есть:

    public function configure() {

        $this->widgetSchema['creator_id'] = new sfWidgetFormInputText(array(),array('readonly' => 'true'));

       ...
    }

Но проблема в том, что он показывает мне идентификатор пользователя вместо имени. В файле sfGuardUser.class.php я создал метод __toString(), возвращающий имя пользователя, но вместо этого он показывает Id.

Как можно сделать, чтобы имя пользователя пользователя вместо идентификатора в форме подкаста отображалось как sfWidgetFormInputText?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Создайте или измените метод __toString() внутри Podcast.class.php и добавьте это:

public function __toString()
{
  return $this->getSfGuardUser()->getUsername();
}
0 голосов
/ 08 декабря 2011

Я надеюсь хорошо понять, что вам нужно ... вы можете добавить в качестве нового виджета имя пользователя с кодом, подобным следующему:

public function configure()
{    
    $this->setWidget('creator_id', new sfWidgetFormInputHidden());
    if ($this->isNew())
    {
        $creator = sfContext::getInstance()->getUser()->getGuardUser();
        $this->object->setCreatorId($creator->getId());
        $username = $creator->getUsername();
    }
    else
        $username = $this->object->getsfGuardUser()->getUsername();

    $this->setWidget('creator_name', new sfWidgetFormInput());
    $widget = $this->getWidget('creator_name');
    $widget->setDefault($username);
    $widget->setAttribute('readonly', 'readonly');
    // if you need to move the widget use FIRST, LAST...
    $this->getWidgetSchema()->moveField('creator_name', sfWidgetFormSchema::FIRST);
    $this->setValidator('creator_name', new sfValidatorPass());
}

Возможно, потребуется некоторая адаптация, потому что я использую Propel.

Наконец, это плохая практика использовать синглтон sfContext::getInstance()->... внутри формы, но это другой вопрос.

[обновление] Как сказал Флюки в своем комментариипростая передача объекта пользователя в качестве параметра формы позволяет полностью устранить необходимость в синглтоне sfContext.

...