Vous pouvez ajouter des attributs supplémentaires et des règles à un modèle. Vous n'avez pas besoin d'utiliser uniquement des attributs directement liés aux champs de votre table de base de données. Regardons un exemple basique. Vous disposez d'un utilisateur (User) tableau qui présente les champs suivants:
Et vous avez une autre table qui stocke les informations profil de l'utilisateur (UserProfile) qui a la structure:
Lorsque l'utilisateur crée son compte, vous auriez une forme qui capture leurs informations. Votre modèle utilisateur aurait des règles comme:
array('email, password', 'required'),
array('email', 'unique', 'message'=>'Email already in use'),
...
Vous pouvez ajouter un attribut pour pays à votre modèle utilisateur comme ceci:
class User extends CActiveRecord {
public $country;
...
Et puis dans vos règles, vous pouvez ajouter le nouvel attribut:
array('email, password, country', 'required'),
array('email', 'unique', 'message'=>'Email already in use'),
...
L'attribut country fera maintenant partie de votre modèle User. Vous pouvez maintenant ajouter à votre formulaire:
<?php echo $form->dropDownList($model,'country',CHtml::listData(Country::model()->findAll(),'id','country_name'),array('empty'=>'-- select a country --')); ?>
maintenant sur votre formulaire soumettre, la méthode $model->validate()
validera le champ du pays. Vous pouvez l'enregistrer manuellement sur votre deuxième modèle (UserProfile), quelque chose comme:
if(isset($_POST['User'])){
if ($model->validate()){
$user_profile = new UserProfile;
$user_profile->user_id = $model->id;
$user_profile->country = $model->country;
$user_profile->save();
...
J'espère que cela répond à votre question.
si vous avez une règle requise dans le 2ème modèle, et que vous passez une instance de 2ème modèle à la forme, alors cela devrait fonctionner –
donc je n'ai pas besoin d'avoir la règle requise dans le premier modèle actuel? – Developer
voir http://stackoverflow.com/questions/10405649/yii-dynamically-change-rules-from-controller –