I'm having some problems with using relations and
doctrine:generate-admin. I have two tables, call them Users and
Umbrellas. There is a one-to-many relation between Users and Umbrellas,
specifically ...
class Umbrella extends sfDoctrineRecord {
public function setUp ()
{
$this->hasOne ('User as owner', array ('local' => 'owner_id',
'foreign' => 'id'));
}
}
The User::setUp function does not specify a relation with Umbrella.
I want to make an admin interface that allows admins to create Umbrella
objects. The first issue is that the widget created to input the
owner_id is an sfWidgetFormDoctrineChoice which makes a select-type
input with every possible user id. This is undesirable for 2 reasons,
first there are far too many users (> 100,000) to populate a select-type
input. Secondly, it is much more intuitive to specify a user by
username instead of by numeric id.
I took care of this first issue by overriding the auto-generated
widget/validator, i.e. ...
class UmbrellaForm extends BaseUmbrellaForm {
public function configure ()
{
parent::configure ();
$this->setWidget ('owner_id', new sfWidgetFormInput ());
$this->setValidator ('owner_id', new UserValidator ());
}
public function updateDefaultsFromObject ()
{
parent::updateDefaultsFromObject ();
$this->setDefault ('owner_id', $this->getObject
()->owner->username;
}
}
class UserValidator extends sfValidatorString {
public function doClean ($value)
{
$value = parent::doClean ($value);
$user = UserTable::getByUsername ($value);
/* check if a valid user, check if user is allowed to own an
umbrella, etc. */
return $user->id;
}
}
The above works pretty handily for associating an existing user with an
umbrella. I'm including it in this post in case I'm doing something
improperly or if it's complicating my unresolved issue, which is ... I
am not able to properly create _new_ Umbrella objects with the admin
interface.
One of the first things that the admin interface does after receiving a
new umbrella form submission is to create a new, empty Umbrella object
_and_ a new, empty User object. When the admin inputs a username for
the owner_id, instead of just inserting a new umbrella row with the
owner_id set, it also tries to insert an entirely new user row into the
database with an already extant username.
So, my question is ... How can I convince the admin interface not to
create a new instance of a foreign relation?
Thanks,
Jim Krehl
--
If you want to report a vulnerability issue on symfony, please send it to
security at symfony-project.com
You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en