Merci à vous deux pour vos réponses.
- Pour la 1ère problématique (remplacer le select par un input text) :
L'objectif premier est seulement de changer le type de champ : avoir un champ texte dans lequel je puisse rentrer l'id d'une famille.
Ok.
Lorsque j'utilise le widget et le validator que tu proposes ufretin, cela ne fonctionne pas. Voici l'erreur (j'ai rentré 1, et la famille ayant l'id 1 existe bel et bien dans ma base) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 500 | Internal Server Error | Doctrine_Connection_Mysql_Exception
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
stack trace
1. at ()
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php line 1082
2. at Doctrine_Connection->rethrowException(object('PDOException'), object('Doctrine_Connection_Statement'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php line 269
3. at Doctrine_Connection_Statement->execute(array('text' => '1'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php line 1006
4. at Doctrine_Connection->execute('SELECT COUNT(*) AS num_results FROM (SELECT p.id FROM personne p LEFT JOIN famille f ON p.famille_id = f.id WHERE p.famille_id = ? GROUP BY p.id) dctrn_count_query', array('text' => '1')) in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php line 800
5. at Doctrine_Connection->fetchAll('SELECT COUNT(*) AS num_results FROM (SELECT p.id FROM personne p LEFT JOIN famille f ON p.famille_id = f.id WHERE p.famille_id = ? GROUP BY p.id) dctrn_count_query', array('text' => '1'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Query.php line 2150
[...] |
En revanche, si je remplace
$this->widgetSchema['famille_id'] = new sfWidgetFormFilterInput(array('with_empty' => false));
par
$this->widgetSchema['famille_id'] = new sfWidgetFormInput();
alors ça fonctionne.
Ce qui semble aller dans le sens de ce que kenny.kev conseillait en premier lieu.
Pourquoi l'utilisation de la classe sfWidgetFormFilterInput pose-t-elle problème ? 
- Pour la 2ème problématique (faire en sorte que l'utilisateur tape un nom au lieu d'un id) :
J'utilise :
- le widget sfWidgetFormInput() (cf. ci-dessus)
- le validateur sfValidatorPass() (cf. message d'ufretin)
- et la surcharge de filtre proposée par ufretin
Or, le filtre prend toujours en compte l'id de la famille et pas le nom. Quand je rentre un nom, je n'ai aucun résultat.
En fait, ufretin, où est le lien avec le champ famille.famille_nom dans ta solution ?
Par exemple, si je veux que l'utilisateur tape une origine (je dis n'importe quoi, c'est pour illustrer), il faudrait alors filtrer en fonction du champ origine de la table famille, et pas en fonction du champ famille_nom, ni du champ id. Donc il faut bien que cette information apparaisse au moins une fois, non ?
Ici, j'ai l'impression qu'on sélectionne les personnes dont le champ famille_id correspond à ce qu'a rentré l'utilisateur. Or, je veux qu'on sélectionne les personnes dont la clé étrangère famille_id renvoie à une famille qui a comme champ famille_nom ce qu'a rentré l'utilisateur.
Partager