¿Cómo actualizar SfuserProfile después de la finalización de un módulo separado? Postave () no funciona
-
26-10-2019 - |
Pregunta
Tengo un formulario de registro que incluye SFregistration y SFProfile, que después de la finalización se redirige a otro formulario, para determinar la corporación del usuario y es un módulo separado. El SFProfile incluye un campo del módulo de la Corporación ... el Corporate_ID. Pero dado que el Corporate_ID no es parte del perfil, no se incluye en el momento de registro. Aquí está la pregunta, después de completar el módulo de la Corporación, ¿cuál es la mejor manera de actualizar el perfil del usuario con Corporate_ID del módulo de la corporación recientemente completado? Intenté esto:
public function postSave()
{
$corpId = $this->form->getId();
$logged_user_id = sfContext::getInstance()->getUser()->getId();
Doctrine_Query::create()
->update('sf_guard_user_profile p')
->set('p.corporate_id', $corpId)
->where('p.user_id' == $logged_user_id )
->execute();
}
colocado en la acción del módulo de la empresa, pero no está actualizando el perfil con la empresa_id.
¿Sugerencias?
ACTUALIZACIÓN - Por solicitud, aquí está la información solicitada: (my >> lib> form >> doctrine >> corporationform.class.php está vacía ... Estaba intentando mis funciones en la clase de acciones ... que puede ser el problema ). Solo para aclarar, solo necesito actualizar el perfil del usuario con el recién creado Corporate_ID después de que el usuario complete el módulo de la corporación.
Y mi esquema:
sfGuardUser:
actAs: [Timestampable]
columns:
first_name: string(255)
last_name: string(255)
email_address:
type: string(255)
notnull: true
unique: true
username:
type: string(128)
notnull: true
unique: true
algorithm:
type: string(128)
default: sha1
notnull: true
salt: string(128)
password: string(128)
is_active:
type: boolean
default: 1
is_super_admin:
type: boolean
default: false
last_login:
type: timestamp
indexes:
is_active_idx:
fields: [is_active]
relations:
Groups:
class: sfGuardGroup
local: user_id
foreign: group_id
refClass: sfGuardUserGroup
foreignAlias: Users
Permissions:
class: sfGuardPermission
local: user_id
foreign: permission_id
refClass: sfGuardUserPermission
foreignAlias: Users
sfGuardUserProfile:
actAs: { Timestampable: ~ }
columns:
id: { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }
user_id: { type: integer }
corporate_id: { type: integer }
type_id: { type: integer, notnull: true }
prefix_id: { type: integer }
middle_name: { type: string(55) }
suffix_id: { type: integer }
phone: { type: string(55), notnull: true }
home_address_line_one: { type: string }
home_address_line_two: { type: string }
home_city: { type: string }
state_id: { type: integer }
home_zip: { type: integer }
relations:
User: { class: sfGuardUser, local: user_id, foreign: id, type: one, foreignType: one, foreignAlias: Profile }
Type: { local: type_id, foreign: id, type: one, foreignAlias: Types }
Prefix: { local: prefix_id, foreign: id, type: one, foreignAlias: Prefixs }
Suffix: { local: suffix_id, foreign: id, type: one, foreignAlias: Suffixs }
State: { local: state_id, foreign: id, foreignAlias: States }
Corporation: { local: corporate_id, foreign: id, foreignAlias: Corporations }
Corporation:
columns:
id: { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }
user_id: { type: integer }
name: { type: string(55), notnull: true }
address_line1: { type: string(255), notnull: true }
address_line2: { type: string(255), notnull: true }
city: { type: string(25), notnull: true }
state_id: { type: integer, notnull: true }
zip: { type: string(25), notnull: true }
phone: { type: string(25), notnull: true }
email: { type: string(100), notnull: true }
website: { type: string(100) }
logo: { type: string(255) }
relations:
User: { class: sfGuardUser, local: user_id, foreign: id, foreignAlias: Users }
Solución 2
No olvides el -> save ();
public function setId()
{
$user_id = $this->getUser()->getGuardUser()->getId();
$corp_id = 1;
$user_profile = Doctrine_Core::getTable('sfGuardUserProfile')->findOneByUserId($user_id);
$user_profile->setCorporateId($corp_id)->save();
}
protected function processForm(sfWebRequest $request, sfForm $form)
{
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
if ($form->isValid())
{
self::setId();
$corporation = $form->save();
$this->redirect('dashboard/index');
}
}
Otros consejos
En tu forma:
public function doUpdateObject($values)
{
parent::doUpdateObject($values);
$this->getObject()->setCorporateId(your value);
}
Por ejemplo //apps/frontend/yourmodule/action.class.php
protected function processForm(sfWebRequest $request, sfForm $form)
{
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
if ($form->isValid())
{
$corporation = $form->save();
$user_id=$this->getUser()->getGuardUser()->getId();
$profile = Doctrine_Core::getTable('sfGuardUserProfile')->findOneByUserId($user_id);
$profile->setCorporateId('your value');