У меня есть проект в symfony, который я бы хотел, чтобы мои пользователи загружали изображение для своего поля «аватара». Я нашел много сообщений о том, как «расширить» таблицы, которые я с приведенной ниже схемой:Symfony add Avatar field to sfGuardUser model
Member:
inheritance:
type: column_aggregation
extends: sfGuardUser
columns:
idmember: { type: integer }
birthday: { type: date }
avatar: { type: string(255) }
bio: { type: string(255) }
Столбцы добавляются в таблицу просто отлично, но когда я иду, чтобы изменить виджет на sfWidgetFormInputFileEditable
это брейки. Вот файл Form.class:
$file_src = $this->getObject()->getAvatar();
if ($file_src == '')
{
$file_src = 'default_image.png';
}
$this->widgetSchema['avatar'] = new sfWidgetFormInputFileEditable(array(
'label' => ' ',
'file_src' => '/uploads/avatar/'.$file_src,
'is_image' => true,
'edit_mode' => true,
'template' => '<div>%file%<br />%input%</div>',
));
и "сохранить" функцию вида:
if($this->isModified())
{
$uploadDir = sfConfig::get('sf_upload_dir');
$thumbnail = new sfThumbnail(150, 150);
$thumbnail2 = new sfThumbnail(800, 800);
if($this->getAvatar())
{
$thumbnail->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
$thumbnail->save($uploadDir.'/avatar/thumbnail/'. $this->getAvatar());
$thumbnail2->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
$thumbnail2->save($uploadDir.'/avatar/big/'. $this->getAvatar());
}
}
Когда я отправить форму, я получаю сообщение об ошибке:
This form is multipart, which means you need to supply a files array as the bind() method second argument.
Можем ли мы увидеть место, где вы «привязываете» свою форму? Кстати, я думаю, что 'extends' не лучший способ повысить ценность sfGuardUser, вы заглянули в встроенную возможность добавления профиля в sfGuardUser? (см. [this] (http://jmather.com/2010/10/09/customize-sfguarduser-sfdocrineguard/) или [это] (http://trac.symfony-project.org/browser/plugins/sfGuardPlugin/ ветки/1.3/README # L225)) – j0k
j0k Спасибо за ваш ответ. Я попытался добавить «Профиль» в sfGuardUser, и мне удалось настроить таблицу, но как добавить дополнительные поля в форму «Зарегистрировать», чтобы она была легко доступна пользователю, и все это появляется на одном и том же форме? Я попытался выполнить этот учебник [ЗДЕСЬ] (http://symfony.com/blog/call-the-expert-customizing-sfdoctrineguardplugin), но он работает только с бэкэнд. Не внешняя страница «Регистрация». Я попытался добавить виджет «аватара» в sfGuardUserForm.class.php, но он не сохраняет значение нигде при отправке формы. – djcloud23
Если вы используете 'sfGuardRegisterForm', он расширяет' BasesfGuardRegisterForm', который расширяет 'sfGuardUserAdminForm'. И ваш профиль определяется внутри 'sfGuardUserAdminForm'. Так что это может сработать. – j0k