Admin-generator et champs notnull
Bonjour,
Je réalise une petite plateforme où des utilisateurs se connectent via login/mot de passe et gèrent un petit carnet de contacts. Comme j'utilise le plugin sfDoctrineGuard je pars sur un modèle ultra-simple pour mieux illustrer mon problème :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Contact:
actAs: { Timestampable: ~ }
columns:
client_id: { type: integer, notnull: true }
nom: { type: string(255), notnull: true }
prenom: { type: string(255), notnull: true }
mail: { type: string(255), notnull: true }
tel: { type: string(255), notnull: true }
relations:
SfGuardUser: { onDelete: CASCADE, local: client_id, foreign: id, foreignAlias: SfGuardUser } |
C'est tout ! Une seule table donc, avec une clé étrangère correspondant à l'id de l'utilisateur identifié via le plugin sfGuardUser.
Pour simplifier la création du carnet d'adresse je créé un module "contact" avec l'admin-generator. Afin que chaque utilisateur n'ait accès qu'à ses contacts, je surcharge la fonction buildQuery de l'action.class générée par l'admin-generator :
Code:
1 2 3 4 5 6 7 8 9 10
|
class contactActions extends autoContactActions
{
protected function buildQuery()
{
$query = parent::buildQuery();
$query->addWhere('client_id = ?', array($this->getUser()->getGuardUser()->getId()));
return $query;
}
} |
Ainsi chaque utilisateur ne voit que son carnet d'adresse depuis le module contact. J'ai également fait en sorte que les référence à client_id (l'id de sf_guard_user) disparaissent des listes et des formulaires. D'ou le generator.yml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
generator:
class: sfDoctrineGenerator
param:
model_class: Contact
theme: admin
non_verbose_templates: true
with_show: false
singular: ~
plural: ~
route_prefix: contact
with_doctrine_route: true
actions_base_class: sfActions
config:
actions: ~
fields: ~
list:
title: Contacts
display: [=nom, prenom, mail, tel, created_at, updated_at]
filter:
display: [nom, prenom, mail, tel]
form:
display: [nom, prenom, mail, tel]
edit: ~
new: ~ |
Les champs created_at et updated_at étant notnull, j'ai pu faire un unset dessus sans que ca pose problème. Par contre si je fais un unset sur client_id je me retrouve avec un client_id en clé étrangère qui est égale à zéro. Je suis donc resté la dessus sur mon contactForm :
Code:
1 2 3 4 5 6 7 8
|
class ContactForm extends BaseContactForm
{
public function configure()
{
unset($this['created_at'], $this['updated_at']);
}
} |
Le problème c'est que quand je créé un nouvel utilisateur, j'ai toujours une erreur parce que je n'ai pas renseigné la clé étrangère. Et je ne sais pas comment faire pour qu'elle soit réglée automatiquement :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
# $form (ContactForm) Toggle details
* $form['id'] (sfWidgetFormInputHidden)
* $form['client_id'] (sfWidgetFormDoctrineChoice)
Required.
* $form['nom'] (sfWidgetFormInputText)
* $form['prenom'] (sfWidgetFormInputText)
* $form['mail'] (sfWidgetFormInputText)
* $form['tel'] (sfWidgetFormInputText)
* $form['_csrf_token'] (sfWidgetFormInputHidden) |
(ci-dessus le message d'erreur avec 'required' associé à client_id)
Donc je ne sais pas trop quoi faire et j'appelle à l'aide. Quelqu'un sait-il comment je pourrais me dépêtrer ?